How to get the latest file name, or the file path that is added into a directory?
6 Answers
$path = "/path/to/my/dir"; $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; } } // now $latest_filename contains the filename of the file that changed last 4 Comments
kojiro
Muhaimin
any new method for fastest searching or scan?
Dennis Heiden
@Muhaimin Abdul Try scandir() ~ PHP 5
Brad Kent
As others have mentioned in other answers... should probably be using
filemtime instead of filectime. a) it's more widely supported across platforms. b) It returns what you're probably wanting: the time that the file was last modifiedHere's how you can do it using DirectoryIterator:
foreach(new DirectoryIterator('/path/to/read') as $item) { if ($item->isFile() && (empty($file) || $item->getMTime() > $file->getMTime())) { $file = clone $item; } } The resulting contents of $file is an instance of the DirectoryIterator class and as such you have access to all of it's methods. To simply get the full path of the result you can do:
echo $file->getPathname(); Comments
$dir = "/path/to/Your/dir"; $pattern = '\.(zip|ZIP|pdf|PDF)$'; // check only file with these ext. $newstamp = 0; $newname = ""; if ($handle = opendir($dir)) { while (false !== ($fname = readdir($handle))) { // Eliminate current directory, parent directory if (ereg('^\.{1,2}$',$fname)) continue; // Eliminate other pages not in pattern if (! ereg($pattern,$fname)) continue; $timedat = filemtime("$dir/$fname"); if ($timedat > $newstamp) { $newstamp = $timedat; $newname = $fname; } } } closedir ($handle); // $newstamp is the time for the latest file // $newname is the name of the latest file // print last mod.file - format date as you like print $newname . " - " . date( "Y/m/d", $newstamp); 1 Comment
Ryan Bayne
This uses a depreciated function: ereg()
My solution with PHP 5:
$dir = "/path/to/Your/dir"; $arraydir =scandir($dir, 1); echo "arraydir 0: " . $arraydir[0] . "<br/>"; // 1. new file echo "arraydir 1: " . $arraydir[1] . "<br/>"; // 2. new file echo "arraydir elements: " . count($arraydir) . "<br/>"; (search words DE: neuste und zweitneuste Datei eines Ordners anzeigen mit PHP )
1 Comment
user
This sorts by name, will work only if you have alphabetically sortable timestamps in the filename, like
exported_data_20170721.csvEnumerate all directory files, get the filemtime() of each and you are done.
3 Comments
Gumbo
I think you rather need
filectime.secretlm
@Gumbo: why use filectime instead of filemtime. I see filemtime() work better on a multitude of platforms while filectime() does not seem to work properly on all Windows servers.
FluorescentGreen5
@secretlm
filectime probably doesn't work because its only the creation time of the file, not the modification time
cinfilectime()does not stand forcreationand theCingetCTime()does not stand forcreation