У меня в настоящее время есть 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);
}
Вам нужно поставить файлы в массив, чтобы отсортировать и найти последний измененный файл.
$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>";
}
}
}
Не проверял, но вот как это сделать.
Это получит все файлы в пути / к / файлам с расширением .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 из-за кеша статистики .