2009-09-29 9 views

Respuesta

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 no es tiempo de creación] (http://userprimary.net/posts/2007/11/18/ctime-in-unix-means-last-change-time-not-create-time/) – kojiro

+1

¿Algún nuevo método para realizar búsquedas o escaneos más rápidos? – Muhaimin

+0

@Muhaimin Abdul Pruebe scandir() ~ PHP 5 –

0

Enumere todos los archivos de directorio, obtenga el filemtime() de cada uno y listo.

+1

Creo que más bien necesita 'filectime'. – Gumbo

+0

@Gumbo: por qué usar el tiempo de proceso en lugar del tiempo de archivo. Veo que filemtime() funciona mejor en una multitud de plataformas, mientras que filectime() no parece funcionar correctamente en todos los servidores de Windows. – secretlm

+1

@secretlm 'filectime' probablemente no funciona porque es solo el tiempo de creación del archivo, no el tiempo de modificación – 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

No importa, veo que lo arregló :) – kkyy

+0

es de mañana aquí :) – 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

Esto utiliza una función depreciada: ereg() –

5

filectime es para cuando los metadatos como los valores de chmod se cambian. filemtime es para el cambio de contenido real.

0

Mi solución con 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/>"; 

(palabras de búsqueda DE: Neuste und zweitneuste Datei eines Ordners anzeigen PHP MIT)

Cuestiones relacionadas