使用PHP在文件夹中查找最旧的文件

时间:2009-11-23 18:24:41

标签: php file sorting

我需要一个PHP脚本来查找文件夹中最旧文件的日期。现在,我正在迭代每个文件,并将它的Date Modified与前一个文件进行比较,并保存最早的日期。

是否有更少的磁盘/内存密集型方法来执行此操作?文件夹中有大约300k文件。如果我在Windows资源管理器中打开该文件夹,它将按修改日期自动排序,我会更快地看到最旧的文件。有什么方法可以利用PHP脚本中的Explorer默认排序吗?

4 个答案:

答案 0 :(得分:24)

// 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.

取自this网站

祝你好运

编辑:要排除目录中的文件以减少不必要的搜索:

$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];

如果您知道要查找的内容以及可以排除的内容,这将非常有用。

答案 1 :(得分:2)

这种方法有一些明显的缺点 - 产生额外的进程,操作系统依赖性等,但对于300k文件,这可能比尝试在PHP中迭代更快:

exec('dir /TW /O-D /B', $output);
var_dump($output[0]);

FWIW,你应该尽量避免在一个目录中拥有300,000个文件。这在大多数文件系统上并不是很好。

答案 2 :(得分:1)

10个月你可能还没有在这里寻找解决方案,但以防万一:

function findOldestFile($directory) {
    if ($handle = opendir($directory)) {
        while (false !== ($file = readdir($handle))) {
            $files[] = $file;
        }

        print_r("\n");
        print_r($files);
        print_r("\n");


        foreach ($files as $file) {
            if (is_file($directory.'/'.$file)) {
                $file_date[$file] = filemtime($directory.'/'.$file);
            }
        }
    }

    closedir($handle);
    asort($file_date, SORT_NUMERIC);
    reset($file_date);
    $oldest = key($file_date);
    return $oldest;
}

答案 3 :(得分:1)

更有效的内存方式,这里我一次不会在内存中存储多个文件名:

 <?php
$directory= "C:\\";

$smallest_time=INF;

$oldest_file='';

if ($handle = opendir($directory)) {

    while (false !== ($file = readdir($handle))) {

        $time=filemtime($directory.'/'.$file);

        if (is_file($directory.'/'.$file)) {

            if ($time < $smallest_time) {
                $oldest_file = $file;
                $smallest_time = $time;
            }
        }
    }
    closedir($handle);
}



echo $oldest_file;

在包含4000个文件的文件夹上运行,并使用比存储文件名少85%的ram。