Get last modified file in a directory

前端 未结 4 1969
时光说笑
时光说笑 2020-11-30 10:23

Is there a way to select only the last file in a directory (with the extensions jpg|png|gif?)

Or do I have to parse the entire directory and check using

相关标签:
4条回答
  • 2020-11-30 10:38

    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.

    0 讨论(0)
  • 2020-11-30 10:40

    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));
    }
    ?>
    
    0 讨论(0)
  • 2020-11-30 10:51
    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 '';
    }
    
    0 讨论(0)
  • 2020-11-30 10:55

    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);
    
    0 讨论(0)
提交回复
热议问题