Php 检查文件夹中的新文件
我有一个php脚本,每5分钟从一个文件夹运行一次。在文件夹中有几个图像,随着时间的推移,我添加了更多图像 我想知道如何在开始时让php脚本检查上次运行脚本后是否存在新文件?如果存在新文件,则脚本应继续,如果不存在新文件,则脚本不应继续。我试着四处搜索,但找不到关于php的任何信息Php 检查文件夹中的新文件,php,Php,我有一个php脚本,每5分钟从一个文件夹运行一次。在文件夹中有几个图像,随着时间的推移,我添加了更多图像 我想知道如何在开始时让php脚本检查上次运行脚本后是否存在新文件?如果存在新文件,则脚本应继续,如果不存在新文件,则脚本不应继续。我试着四处搜索,但找不到关于php的任何信息 任何知道此问题快速解决方案的人都可以打赌?方法: 在文件或数据库中执行cron时存储当前时间 每次cron启动时,从文件或数据库中获取cron的最后执行时间 对上次执行后创建的文件进行计数 如果计数大于0。处理cron
任何知道此问题快速解决方案的人都可以打赌?方法:
您可以跟踪脚本上次运行的时间,并使用filemtime检查文件是否在上次执行后更新或创建
如果新文件也使用新的时间戳创建,则可以使用
filemtime()
仅获取在指定时间窗口中创建/修改的文件
例如:
$files = glob("folder/*.jpg");
$files = array_filter($files, function ($file) { return filemtime($file) >= time() - 5*60; /* modified in the last 5 minutes */ });
if ($files)
{
// there are new files! $files is an array with their names
}
为了确保不会丢失任何文件,您可能希望将上次运行的时间存储在某个位置,以便在cron延迟一两秒钟并且新文件正好在该窗口内创建的情况下,您不会丢失对它们的跟踪
更新意见:
现在,要存储上次检查的时间,由您决定如何执行,您可以使用数据库、文件、某种环境变量等,但下面是一个示例,说明如何在文件中存储time()
:
$last = (int)file_get_contents('folder/timestamp.txt');
file_put_contents('folder/timestamp.txt', time());
$files = glob("folder/*.jpg");
$files = array_filter($files, function ($file) { return filemtime($file) > $last; });
if ($files)
{
// there are new files! $files is an array with their names
}
只需确保您的PHP脚本可以修改文件夹/timestamp.txt,并且使用此脚本,它将始终处理自上次运行以来修改的新文件,无论它发生在多长时间之前。使用如下,您将获得添加的时间作为日期格式
$file_time = date ("F d Y H:i:s.", filemtime($filename);
谢谢你,如何以及在哪里存储时间并让它在下次运行时检查它是最好的方法?
$file_time = date ("F d Y H:i:s.", filemtime($filename);