Get last modified file in a directory
Solution 1:
Yes you have to read through them all. But since directory accesses are cached, you shouldn't really worry about it.
$files = array_merge(glob("img/*.png"), glob("img/*.jpg"));
$files = array_combine($files, array_map("filemtime", $files));
arsort($files);
$latest_file = key($files);
Solution 2:
I don't remember having ever seen a function that would do what you ask.
So, I think you will have to go through all (at least jpg/png/gif) files, and search for the last modification date of each of them.
Here's a possible solution, based on the DirectoryIterator
class of the 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);
Of course, you could also do the same thing with readdir()
and other corresponding functions.
Solution 3:
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 '';
}