获取目录中的最后修改文件

dyn*_*mic 14 php

有没有办法只选择目录中的最后一个文件(扩展名jpg|png|gif?)

或者我是否必须解析整个目录并检查使用filemtime

mar*_*rio 39

是的,你必须仔细阅读它们.但是,由于缓存了目录访问,因此您不必担心它.

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

$latest_file = key($files);
Run Code Online (Sandbox Code Playgroud)

  • 不,它只是一个内置文件名过滤器的scandir().(我曾经写过一次PHP4重新实现).这里真正的问题是使用两个globs.在你的情况下使用`glob("img/*.{png,jpg,gif}","GLOB_BRACE")会更快. (3认同)

Pas*_*TIN 5

我不记得曾经见过可以执行您要求的功能。

因此,我认为您必须浏览所有(至少 jpg/png/gif)文件,并搜索每个文件的最后修改日期。


这是一个可能的解决方案,基于DirectoryIteratorSPL的类:

$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);
Run Code Online (Sandbox Code Playgroud)


当然,你也可以用readdir()和 其他相应的函数来做同样的事情。