Search code examples
phpglob

Find the most recent file starting with


I will wish to conjugate function to find the most recent file starting with:

$path = "/home/www/images/xml_cache"; 
$nom="images_album_6*.xml";

foreach (glob($path.'/'.$nom.'') as $filename) { }

and

  $latest_ctime = 0;
  $latest_filename = '';  
  $d = dir($path);
  while (false !== ($entry = $d->read( )))  {
    $filepath = "{$path}/{$entry}";
    // could do also other checks than just checking whether the entry is a file
    if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
      $latest_ctime = filectime($filepath);
      $latest_filename = $entry;
    }
  }
}

But how?

Thank you in advance


Solution

  • Assuming you have PHP5, you may use the RecursiveIterator class combined with the getMTime function:

    $path = "/home/www/images/xml_cache"; 
    $pattern = "/^images_album_6\S+.xml/i";
    $latest_time = 0;
    $latest_filename = '';
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
    foreach ($iterator as $file) {
        if ($file->isFile() && preg_match($pattern,$file->getFilename())) {
            if ($file->getMTime() > $latest_time) {
                $latest_time = $file->getMTime();
                $latest_filename = $file->getPathname();
            }
        }
    }
    print("Latest file: ".$latest_filename.PHP_EOL);
    

    This will recursively check your specified path and print the full path of the most recent file matching your file name pattern.