requtize/fresh-file

此包已废弃,不再维护。没有建议的替代包。

简单、快速、独立的PHP库,帮助您确定自上次检查以来是否有任何文件被修改 - 这个文件是否新鲜?

0.3.1 2018-09-17 17:54 UTC

This package is auto-updated.

Last update: 2024-03-13 01:27:15 UTC


README

简单、快速、独立的PHP库,帮助您确定自上次检查以来是否有任何文件被修改 - 这个文件是否新鲜?

脚本使用 filemtime() 函数(带可选的 clearstatcache())来获取文件的最后修改时间。所有修改时间都存储在一个缓存文件中(如果您使用多个实例,将创建多个文件),因此即使您使用此库处理数百个文件,它也将在一个文件中存储它们的修改时间,并且缓存文件的读写将在每次请求时只进行一次。

使用方法

您可以根据需要创建多个实例,或者创建一个,并通过类静态方法使用它作为哑单例。作为参数,您必须传递一个有效的缓存文件路径,脚本可以将元数据缓存放置在此处。

// Create by object
$ff = new FreshFile($cacheFilepath);
// Create using factory
$ff = FreshFile::create($cacheFilepath);

一旦创建,您可以在任何需要的地方使用您的对象,或从静态调用中获取现有对象。

// Get existent object from class
$ff = FreshFile::get();

在第一种解决方案中,您必须在任何想要使用此对象的地方传递此对象。在第二种解决方案中,您必须一次性创建对象,然后可以在任何需要的地方使用它,而无需将其作为参数传递。

防止在对象销毁时保存缓存

FreshFile在FreshFile对象销毁时(当PHP脚本/请求结束时)保存元数据文件,默认情况下。但在某些情况下,您可能需要阻止这种情况。也许您的代码中出现了错误,您不会将当前收集的数据保存到缓存中?为此,将第二个参数作为false传递以防止这种情况。从现在起,您必须手动关闭FreshFile并使用close()方法保存请求中收集的元数据。

// Prevent default save on destroy object
$ff = new FreshFile($cacheFilepath, false);
$ff = FreshFile::create($cacheFilepath, false);

// ...some code...

// At the end, close the FreshFile and save metadata
$ff->close();
记住!

如果您阻止了销毁时的保存,您必须在脚本结束后始终关闭FreshFile对象!

用例

您可以一次检查一个或多个文件。如果传递文件路径数组,并且任何文件都不会是新鲜的(即使100个中的1个),则方法返回true - 这意味着文件是新鲜的,需要对此文件执行某些操作。

// One file
if($ff->isFresh($file))
    // Do something...
    
// Many files
if($ff->isFresh([ $file1, $file2, $file3 ]))
    // Do something...

如果您检查文件是否新鲜,脚本将自动更新该文件的元数据,下次您询问对象是否相同的文件是新鲜的,脚本返回false - 这意味着该文件不需要更新。 即使在同一脚本/请求中逐行再次调用时!!

var_dump($ff->isFresh($file)); // returns true
var_dump($ff->isFresh($file)); // returns false !!!
var_dump($ff->isFresh($file)); // returns false !!!

相关文件

您可以定义主文件的相关文件。当您使用导入编译LESS或SCSS文件时,在配置文件中创建导入等情况下,这很有用。一旦传递了相关文件,脚本也将检查这些相关文件是否新鲜。如果主文件或任何相关文件发生变化,您将收到通知。

$ff->setRelatedFiles($file, $relatedFiles);
$ff->isFresh($file);

您还可以在第一次新鲜检查后设置相关文件。这可能在检测到任何这些文件被修改,并且您希望为此文件更新相关文件时很有用。

if($ff->isFresh($file))
{
    // Do something with Config, LESS, SCSS...
    
    // After compiling files in library, You can get imported files from library, and set
    // them into FreshFile object. Next time these files will also be checked if were modified.
    // FreshFile remember related files between requests.
    $relatedFiles = $object->getImportedFiles();
    $ff->setRelatedFiles($file, $relatedFiles);
}

许可

此代码根据MIT许可证授权。