2009-09-29 3 views

ответ

49
$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 
+8

[ctime не время создания] (http://userprimary.net/posts/2007/11/18/ctime-in-unix-means-last-change-time-not-create-time/) – kojiro

+1

любой новый метод для быстрого поиска или сканирования? – Muhaimin

+0

@Muhaimin Abdul Попробуйте scandir() ~ PHP 5 –

0

Перечислить все файлы каталога, получить файлmime() каждого из них, и все готово.

+1

Я думаю, что вам нужно, а 'filectime'. – Gumbo

+0

@Gumbo: зачем использовать filectime вместо filemtime. Я вижу, что filemtime() работает лучше на множестве платформ, а filectime(), похоже, не работает должным образом на всех серверах Windows. – secretlm

+1

@secretlm 'filectime', вероятно, не работает, потому что его только время создания файла, а не время модификации – FluorescentGreen5

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; 
    } 
} 
+0

Ничего, я вижу, что вы исправили его :) – kkyy

+0

это утро здесь :) – NDM

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); 
+0

В нем используется обесцененная функция: ereg() –

5

filectime предназначен для тех случаев, когда изменены метаданные, такие как значения chmod. filemtime предназначен для фактического изменения контента.

0

Мое решение с 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/>"; 

(поиск слова DE: neuste унд zweitneuste Datei Эйнес Ordners Anzeigen PHP) Массачусетский технологический институт

Смежные вопросы