35

How to get the latest file name, or the file path that is added into a directory?

2

6 Answers 6

59
$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 
Sign up to request clarification or add additional context in comments.

4 Comments

any new method for fastest searching or scan?
@Muhaimin Abdul Try scandir() ~ PHP 5
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 modified
6
$dir = dirname(__FILE__).DIRECTORY_SEPARATOR; $lastMod = 0; $lastModFile = ''; foreach (scandir($dir) as $entry) { if (is_file($dir.$entry) && filectime($dir.$entry) > $lastMod) { $lastMod = filectime($dir.$entry); $lastModFile = $entry; } } 

Comments

4

Here'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

3
$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

This uses a depreciated function: ereg()
1

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

This sorts by name, will work only if you have alphabetically sortable timestamps in the filename, like exported_data_20170721.csv
0

Enumerate all directory files, get the filemtime() of each and you are done.

3 Comments

I think you rather need filectime.
@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.
@secretlm filectime probably doesn't work because its only the creation time of the file, not the modification time

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.