файлы вида по дате в PHP

У меня в настоящее время есть index.php файл, который позволяет мне производить список файлов в том же каталоге, вывод показывает имена затем, я использовал filemtime () функция для показа даты, когда файл был изменен. моя проблема теперь, как я отсортирую вывод для показа последнего измененного файла?, я думал некоторое время, как сделать это. если только я сделаю его с mysql взаимодействием то не будет никакой проблемы вообще. покажите мне пример, как отсортировать и произвести список файлов, начинающих с последнего измененного. это - то, что я имею на данный момент

if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
       if ($file != "." && $file != "..") {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
          if(strlen($file)-strpos($file,".swf")== 4){
            echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
           }
       }
   }
   closedir($handle);
}
53
задан sasori 19 April 2010 в 00:47
поделиться

2 ответа

Вам нужно поставить файлы в массив, чтобы отсортировать и найти последний измененный файл.

$files = array();
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
           $files[filemtime($file)] = $file;
        }
    }
    closedir($handle);

    // sort
    ksort($files);
    // find the last modification
    $reallyLastModified = end($files);

    foreach($files as $file) {
        $lastModified = date('F d Y, H:i:s',filemtime($file));
        if(strlen($file)-strpos($file,".swf")== 4){
           if ($file == $reallyLastModified) {
             // do stuff for the real last modified file
           }
           echo "<tr><td><input type=\"checkbox\" name=\"box[]\"></td><td><a href=\"$file\" target=\"_blank\">$file</a></td><td>$lastModified</td></tr>";
        }
    }
}

Не проверял, но вот как это сделать.

19
ответ дан 7 November 2019 в 08:17
поделиться

Это получит все файлы в пути / к / файлам с расширением .swf в массив, а затем отсортирует этот массив по mtime файла

$files = glob('path/to/files/*.swf');
usort($files, function($a, $b) {
    return filemtime($a) < filemtime($b);
});

. Вышеупомянутая функция использует лямбда-функцию и требует PHP 5.3. До версии 5.3 вы использовали

usort($files, create_function('$a,$b', 'return filemtime($a)<filemtime($b);'));

. Если вы не хотите использовать анонимную функцию, вы можете точно так же определить обратный вызов как обычную функцию и вместо этого передать имя функции в usort .

С полученным массивом вы затем перебираете файлы следующим образом:

foreach($files as $file){
    printf('<tr><td><input type="checkbox" name="box[]"></td>
            <td><a href="%1$s" target="_blank">%1$s</a></td>
            <td>%2$s</td></tr>', 
            $file, // or basename($file) for just the filename w\out path
            date('F d Y, H:i:s', filemtime($file)));
}

Обратите внимание, что, поскольку вы уже вызвали filemtime при сортировке файлов, при повторном вызове его в цикл foreach из-за кеша статистики .

159
ответ дан 7 November 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: