2010-03-11 4 views

Répondre

14
function newest($a, $b) 
{ 
    return filemtime($a) - filemtime($b); 
} 

$dir = glob('files/*'); // put all files in an array 
uasort($dir, "newest"); // sort the array by calling newest() 

foreach($dir as $file) 
{ 
    echo basename($file).'<br />'; 
} 

Crédit goes here.

+0

@stereofrog: bon point, merci (édité la réponse) – ChristopheD

+0

Belle solution mais elle ne serait pas à l'échelle. –

1

Une solution serait de:

  • itérer sur les fichiers dans le répertoire - en utilisant DirectoryIterator, par exemple
  • Pour chaque fichier, obtenir son dernier temps de modification, en utilisant SplFileInfo::getMTime
  • Mettez tout cela dans un tableau, avec:
    • les fichiers noms comme clés
    • Les temps de modification en tant que valeurs
  • et trier le tableau, soit avec asort ou arsort - en fonction de l'ordre dans lequel vous voulez que vos fichiers.


Par exemple, cette partie du code:

$files = array(); 
$dir = new DirectoryIterator(dirname(__FILE__)); 
foreach ($dir as $fileinfo) { 
    if (!$fileinfo->isDot()) { 
     $files[$fileinfo->getFilename()] = $fileinfo->getMtime(); 
    } 
} 

arsort($files); 
var_dump($files); 

Donne-moi:

array 
    'temp.php' => int 1268342782 
    'temp-2.php' => int 1268173222 
    'test-phpdoc' => int 1268113042 
    'notes.txt' => int 1267772039 
    'articles' => int 1267379193 
    'test.sh' => int 1266951264 
    'zend-server' => int 1266170857 
    'test-phing-1' => int 1264333265 
    'gmaps' => int 1264333265 
    'so.php' => int 1264333262 
    'prepend.php' => int 1264333262 
    'test-curl.php' => int 1264333260 
    '.htaccess' => int 1264333259 

-à-dire la liste des fichiers dans le répertoire où est enregistré mon script, avec le plus récemment modifié au début de la liste.

3

lire les fichiers dans un répertoire en utilisant readdir à un tableau avec leur filemtime enregistré. Triez le tableau en fonction de cette valeur et vous obtiendrez les résultats.

Questions connexes