Получить последний измененный файл в каталоге

Есть ли способ выбрать только последний файл в каталоге (с расширениями jpg|png|gif ?)

Или мне нужно разобрать весь каталог и проверить с помощью filemtime ?

Да, вы должны прочитать их все. Но поскольку обращения к каталогам кэшируются, вы не должны беспокоиться об этом.

 $files = array_merge(glob("img/*.png"), glob("img/*.jpg")); $files = array_combine($files, array_map("filemtime", $files)); arsort($files); $latest_file = key($files); 

Я не помню, чтобы когда-либо видел функцию, которая будет делать то, что вы просите.

Итак, я думаю, вам придется проходить через все (по крайней мере, jpg / png / gif) файлы и искать последнюю дату изменения каждого из них.

Вот возможное решение, основанное на классе DirectoryIterator SPL:

 $path = null; $timestamp = null; $dirname = dirname(__FILE__); $dir = new DirectoryIterator($dirname); foreach ($dir as $fileinfo) { if (!$fileinfo->isDot()) { if ($fileinfo->getMTime() > $timestamp) { // current file has been modified more recently // than any other file we've checked until now $path = $fileinfo->getFilename(); $timestamp = $fileinfo->getMTime(); } } } var_dump($path); 

Конечно, вы также можете сделать то же самое с readdir() и другими соответствующими функциями.

 function listdirfile_by_date($path) { $dir = opendir($path); $list = array(); while($file = readdir($dir)) { if($file != '..' && $file != '.') { $mtime = filemtime($path . $file) . ',' . $file; $list[$mtime] = $file; } } closedir($dir); krsort($list); foreach($list as $key => $value) { return $list[$key]; } return ''; }