web-dev-qa-db-fra.com

Code de boucle pour chaque fichier dans un répertoire

J'ai un répertoire d'images que je veux parcourir et faire des calculs de fichiers. C'est peut-être juste un manque de sommeil, mais comment pourrais-je utiliser PHP pour regarder dans un répertoire donné et passer en boucle dans chaque fichier en utilisant une sorte de boucle for?

Merci!

96
Chiggins

scandir :

$files = scandir('folder/');
foreach($files as $file) {
  //do your work here
}

ou glob peut être encore mieux pour vos besoins:

$files = glob('folder/*.{jpg,png,gif}', GLOB_BRACE);
foreach($files as $file) {
  //do your work here
}
248
Emil Vikström

Découvrez la classe DirectoryIterator .

À partir d'un des commentaires sur cette page:

// output all files and directories except for '.' and '..'
foreach (new DirectoryIterator('../moodle') as $fileInfo) {
    if($fileInfo->isDot()) continue;
    echo $fileInfo->getFilename() . "<br>\n";
}

La version récursive est RecursiveDirectoryIterator .

58
squirrel

Cherche la fonction glob () :

<?php
$files = glob("dir/*.jpg");
foreach($files as $jpg){
    echo $jpg, "\n";
}
?>
8
fvox

Essayez GLOB ()

$dir = "/etc/php5/*";  

// Open a known directory, and proceed to read its contents  
foreach(glob($dir) as $file)  
{  
    echo "filename: $file : filetype: " . filetype($file) . "<br />";  
}  
3
Phill Pafford

Utilisez la fonction glob dans une boucle foreach pour faire ce qui est une option. J'ai également utilisé la fonction file_exists dans l'exemple ci-dessous pour vérifier si le répertoire existe avant d'aller plus loin.

$directory = 'my_directory/';
$extension = '.txt';

if ( file_exists($directory) ) {
   foreach ( glob($directory . '*' . $extension) as $file ) {
      echo $file;
   }
}
else {
   echo 'directory ' . $directory . ' doesn\'t exist!';
}
3
Jake