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

时间:2011-03-27 09:38:04

标签: php

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

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

进行检查

4 个答案:

答案 0 :(得分:39)

是的,你必须仔细阅读它们。但是由于目录访问被缓存,你不应该真的担心它。

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

$latest_file = key($files);

答案 1 :(得分:4)

我不记得曾经见过一个可以做你要求的功能。

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


这是一个可能的解决方案,基于SPL的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()和其他相应的函数执行相同的操作。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

使用此代码:

<?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));
}
?>