使用 PHP 查找文件夹中最旧的文件
我需要一个PHP脚本,可以在文件夹中找到最旧文件的日期。现在,我正在迭代每个文件,并将其修改日期与上一个文件进行比较,并保留存储的最旧日期。
是否有一种磁盘/内存密集程度较低的方法来执行此操作?文件夹中大约有 300k 个文件。如果我在Windows资源管理器中打开该文件夹,它将按修改日期自动排序,并且我可以看到最旧的文件要快得多。有没有办法利用资源管理器从PHP脚本的默认排序?
我需要一个PHP脚本,可以在文件夹中找到最旧文件的日期。现在,我正在迭代每个文件,并将其修改日期与上一个文件进行比较,并保留存储的最旧日期。
是否有一种磁盘/内存密集程度较低的方法来执行此操作?文件夹中大约有 300k 个文件。如果我在Windows资源管理器中打开该文件夹,它将按修改日期自动排序,并且我可以看到最旧的文件要快得多。有没有办法利用资源管理器从PHP脚本的默认排序?
// Grab all files from the desired folder
$files = glob( './test/*.*' );
// Sort files by modified time, latest to earliest
// Use SORT_ASC in place of SORT_DESC for earliest to latest
array_multisort(
array_map( 'filemtime', $files ),
SORT_NUMERIC,
SORT_ASC,
$files
);
echo $files[0] // the latest modified file should be the first.
摘自本网站
祝你好运
编辑:要排除目录中的文件以减少不必要的搜索:
$files = glob( './test/*.*' );
$exclude_files = array('.', '..');
if (!in_array($files, $exclude_files)) {
// Sort files by modified time, latest to earliest
// Use SORT_ASC in place of SORT_DESC for earliest to latest
array_multisort(
array_map( 'filemtime', $files ),
SORT_NUMERIC,
SORT_ASC,
$files
);
}
echo $files[0];
如果您知道要查找的内容以及可以排除的内容,这将很有帮助。
这种方法有一些明显的缺点 - 生成一个额外的进程,操作系统依赖性等,但对于300k文件,这可能比尝试在PHP中迭代更快:
exec('dir /TW /O-D /B', $output);
var_dump($output[0]);
FWIW,您应该真正尝试避免在单个目录中包含300,000个文件。这在大多数文件系统上的表现并不好。