Найти самый старый файл в папке с помощью PHP

Мне нужен PHP-скрипт, который найдет дату самого старого файла в папке. Прямо сейчас, я повторяю каждый файл и сравниваю его Date Modified с предыдущим файлом и сохраняю самую старую дату.

Существует ли меньше возможностей для работы с дисками / памятью? В папке содержится около 300 тыс. Файлов. Если я открою папку в Проводнике Windows, она будет автоматически сортироваться по дате, и я увижу самый старый файл намного быстрее. Есть ли способ, которым я могу использовать сортировку по умолчанию Explorer из скрипта 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. 

С этого сайта

Удачи

EDIT: Чтобы исключить файлы в каталоге, чтобы уменьшить ненужные запросы:

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

Это полезно, если вы знаете, что искать и чего вы можете исключить.

Есть некоторые очевидные недостатки в этом подходе – появление дополнительного процесса, зависимость от ОС и т. Д., Но для файлов 300 К, это может быть намного быстрее, чем пытаться выполнить итерацию в PHP:

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

FWIW, вы действительно должны стараться избегать наличия 300 000 файлов в одном каталоге. Это не очень хорошо работает на большинстве файловых систем.

Через 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; } 

Больше памяти эффективный способ сделать это, здесь я никогда не храню больше одного имени файла в памяти за раз:

  <?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% меньше памяти, чем хранение имен файлов.