reportico / fresh-file
简单、快速、独立的PHP库,帮助您判断自上次检查以来是否有任何文件被修改 - 这份文件是否是新的?
Requires
- php: ~5.5 || ~7.1 || ~8.0
This package is auto-updated.
Last update: 2024-09-07 20:21:44 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许可证下授权。