有没有一种方法可以仅选择目录中的最后一个文件(扩展名为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);
DirectoryIterator
类:$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()
和其他相应的函数来完成同样的事情。SplFileInfo::getExtension
方法只能在 PHP >= 5.3.6 版本以上使用 (http://fr2.php.net/manual/en/splfileinfo.getextension.php)。 - Pascal MARTINpreg_match(/\.(jpg|gif)$/i,$file)
。 - dynamicDirectoryIterator
(或FilesystemIterator
)包装在RegexIterator
中,以仅迭代所需的图像文件。还有一个GlobIterator
,但在这里没有多大用处。 - salathefunction 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 '';
}
Use this code:
<?php
// outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23.
$filename = 'somefile.txt';
if (file_exists($filename)) {
echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
?>
glob("img/*.{png,jpg,gif}", GLOB_BRACE)
。 - mario