Сортировка файлов по дате создания/изменения в PHP
Возможный дубликат:
Время создания файла
В PHP, как получить файлы, содержащиеся в папке, отсортированной по дате создания (или любому другому механизму сортировки)?
В соответствии с документом функция readdir():
Имена файлов возвращаются в порядок, в котором они хранятся файловая система.
Ответы
Ответ 1
сохранить свою информацию в массиве, отсортировать массив и затем закодировать массив
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);
}
}
Ответ 2
Что мое решение:
$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" возьмите требуемый файл.
Ответ 3
Вы можете хранить файлы в массиве, где ключ является именем файла, а значением является значение для сортировки по (например, дата создания) и использование 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"
}
Ответ 4
Хе, даже отличный DirectoryIterator может сделать это из коробки. Вздох.
Кажется, что довольно мощный script делает все, что упоминается здесь: 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);
Ответ 5
Вы можете использовать scandir()
для чтения содержимого каталога в массив, затем используйте fileatime()
или filectime()
, чтобы просмотреть каждый доступ к файлу или время создания соответственно. Сортировка массива здесь не должна быть слишком сложной.
Ответ 6
использовать shell_exec для выполнения команды на уровне os? в окне linux/unix это может сработать;
$output=shell_exec('ls -t1');