Есть ли способ выбрать только последний файл в каталоге (с расширениями 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 ''; }