Возможный дубликат:
Время создания файла
В 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');