Сортировка файлов по дате создания / изменения в PHP

Возможный дубликат:
Время создания файла

В PHP, как получить файлы, содержащиеся в папке, отсортированной по дате создания (или любому другому механизму сортировки)?

Согласно документу , функция readdir () :

Имена файлов возвращаются в том порядке, в котором они хранятся в файловой системе.

сохраните их информацию в массиве, отсортируйте массив и затем зациклируйте массив

if($h = opendir($dir)) { $files = array(); while(($file = readdir($h) !== FALSE) $files[] = stat($file); // do the sort usort($files, 'your_sorting_function'); // do something with the files foreach($files as $file) { echo htmlspecialchars($file); } } 

Это мое решение:

 $fileList = array(); $files = glob('home/dir/*.txt'); foreach ($files as $file) { $fileList[filemtime($file)] = $file; } ksort($fileList); $fileList = array_reverse($fileList, TRUE); print_r($filelist); 

вывод выглядит следующим образом:

 array( (int) 1340625301 => '/home/dir/file15462.txt', (int) 1340516112 => '/home/dir/file165567.txt', (int) 1340401114 => '/home/dir/file16767.txt' ) 

Затем с циклом «foreach» возьмите требуемый файл.

Вы можете хранить файлы в массиве, где ключ является именем файла, а значением является значение для сортировки по (например, дата создания) и использование asort() в этом массиве.

 $files = array( 'file1.txt' => 1267012304, 'file3.txt' => 1267011892, 'file2.txt' => 1266971321, ); asort($files); var_dump(array_keys($files)); # Output: array(3) { [0]=> string(9) "file2.txt" [1]=> string(9) "file3.txt" [2]=> string(9) "file1.txt" } 

Хех, даже великий DirectoryIterator не может сделать это из коробки. Вздох.

Кажется, есть довольно мощный скрипт, который делает все, что указано здесь: preg_find . Я никогда не работал с ним, но он выглядит хорошо.

 sorted in by filesize, in descending order? $files = preg_find('/./', $dir, PREG_FIND_RECURSIVE| PREG_FIND_RETURNASSOC | PREG_FIND_SORTFILESIZE|PREG_FIND_SORTDESC); $files=array_keys($files); 

Вы можете использовать scandir() для чтения содержимого каталога в массив, а затем использовать fileatime() или filectime() чтобы просмотреть доступ к каждому файлу или время создания соответственно. Сортировка массива здесь не должна быть слишком сложной.

использовать shell_exec для выполнения команды на уровне os? в окне linux / unix это может сработать;

 $output=shell_exec('ls -t1');