Сортировка файлов по дате создания/изменения в 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');