8721 sujets

Développement web côté serveur, CMS

Je souhaiterai conjuguer deux fonctions afin de trouver le fichier le plus récent commençant par:

$path = "/home/www/images/xml_cache"; 
$nom="images_album_6*.xml";

  foreach (glob($path.'/'.$nom.'') as $filename) { }


et



$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;
	
	
  }
}
  }


Mais comment ?

Merci par avance
Qu'est-ce qui te pose problème ?

Fichiers commençant par => fonction glob
Fichier le plus récent => dates de fichiers => fonctions filemtime ou filectime.
Ca c'est ce que tu aurais pu avoir des difficultés à trouver.

Tu arrives avec des exemples qui utilise ces fonctions correctement. Ce qu'il te reste à faire, c'est comprendre les codes que tu as copié, et du b.a.ba de la programmation: conditions, boucles, variables
QuentinC a écrit :

Fichiers commençant par => fonction glob
Fichier le plus récent => dates de fichiers => fonctions filemtime ou filectime.
Ca c'est ce que tu aurais pu avoir des difficultés à trouver.


Depuis PHP5 tu n'as plus besoin d'utiliser ces vieilles fonctions, la bibliothèque standard gère tout ça d'office.

Exemple :


$dir = new RecursiveDirectoryIterator("/home/www/images/xml_cache");
$iterator = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($iterator, "#images_album_6*\.xml#", RegexIterator::GET_MATCH);
foreach($files as $file) {
  echo $file->getMTime();
}

Modifié par jb_gfx (06 Aug 2013 - 11:46)
Merci pour vos réponses

Une solution qui fonctionne :

$path = "/home/www/images/xml_cache"; 
$pattern = "/^images_album_6\S+.xml/i";
$latest_time = 0;
$latest_filename = '';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $file) {
    if ($file->isFile() && preg_match($pattern,$file->getFilename())) {
        if ($file->getMTime() > $latest_time) {
            $latest_time = $file->getMTime();
            $latest_filename = $file->getPathname();
        }
    }
}
print("Latest file: ".$latest_filename.PHP_EOL);

Modifié par Phil56Bre (06 Aug 2013 - 13:17)
Tiens, intéressantes ces classes. Je ne savais pas que ça existait. J'utilise PDO et mes propres classes, mais sinon en fonctionnalités de base comme celles-là je remarque que je suis pas mal resté à la mode php 4.

Merci jbgfx.