Obtener el último archivo modificado en un directorio

¿Hay alguna manera de seleccionar solo el último archivo en un directorio (con las extensiones jpg|png|gif ?)

¿O tengo que analizar todo el directorio y verificarlo usando filemtime ?

Sí, tienes que leerlos todos. Pero dado que los accesos al directorio están en la memoria caché, no deberías preocuparte por eso.

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

No recuerdo haber visto alguna vez una función que hiciera lo que preguntas.

Por lo tanto, creo que tendrá que revisar todos los archivos (al menos jpg / png / gif) y buscar la última fecha de modificación de cada uno de ellos.

Aquí hay una posible solución, basada en la clase DirectoryIterator del 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); 

Por supuesto, también podría hacer lo mismo con readdir() y otras funciones correspondientes.

 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 ''; }