Как получить X новейших файлов из каталога на PHP?

Код ниже является частью функции для захвата 5 файлов изображений из заданного каталога.

В настоящий момент readdir возвращает изображения «в том порядке, в котором они хранятся файловой системой» в соответствии с спецификацией .

Мой вопрос в том, как я могу изменить его, чтобы получить последние 5 изображений? Либо на last_modified даты last_modified либо имени файла (которые выглядят как 0000009-16-5-2009.png, 0000012-17-5-2009.png и т. Д.).

 if ( $handle = opendir($absolute_dir) ) { $i = 0; $image_array = array(); while ( count($image_array) < 5 && ( ($file = readdir($handle)) !== false) ) { if ( $file != "." && $file != ".." && $file != ".svn" && $file != 'img' ) { $image_array[$i]['url'] = $relative_dir . $file; $image_array[$i]['last_modified'] = date ("F d YH:i:s", filemtime($absolute_dir . '/' . $file)); } $i++; } closedir($handle); } 

Related of "Как получить X новейших файлов из каталога на PHP?"

Если вы хотите сделать это полностью на PHP, вы должны найти все файлы и их последние времена модификации:

 $images = array(); foreach (scandir($folder) as $node) { $nodePath = $folder . DIRECTORY_SEPARATOR . $node; if (is_dir($nodePath)) continue; $images[$nodePath] = filemtime($nodePath); } arsort($images); $newest = array_slice($images, 0, 5); 

Если вас действительно интересуют только картинки, вы можете использовать glob () вместо scandir soulmerge:

 $images = array(); foreach (glob("*.{png,jpg,jpeg}", GLOB_BRACE) as $filename) { $images[$filename] = filemtime($filename); } arsort($images); $newest = array_slice($images, 0, 5); 

Или вы можете создать функцию для последних 5 файлов в указанной папке.

 private function getlatestfivefiles() { $files = array(); foreach (glob("application/reports/*.*", GLOB_BRACE) as $filename) { $files[$filename] = filemtime($filename); } arsort($files); $newest = array_slice($files, 0, 5); return $newest; } 

btw im с использованием структуры CI. ура!