Je recherche un script PHP) qui parcourt tous les fichiers d'un répertoire afin de pouvoir utiliser le nom de fichier, comme le formatage, l'impression ou l'ajouter à un lien. Je souhaite pouvoir trier les fichiers par nom, par type ou par date de création/d’ajout/de modification (pensez au répertoire "index" de fantaisie). J'aimerais également pouvoir ajouter des exclusions à la liste des fichiers, telles que le script lui-même ou d'autres fichiers "système" (comme le .
et ..
"répertoires".)
Etant donné que j'aimerais pouvoir modifier le script, je suis plus intéressé par la documentation = PHP) et par apprendre à en écrire une moi-même. Cela dit, s'il en existe une existante scripts, tutoriels et autres joyeusetés, s'il vous plaît faites le moi savoir.
Vous pouvez utiliser le DirectoryIterator . Exemple du manuel php:
<?php
$dir = new DirectoryIterator(dirname(__FILE__));
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
?>
Si vous n'avez pas accès à la classe DirectoryIterator, essayez ceci:
<?php
$path = "/path/to/files";
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ('.' === $file) continue;
if ('..' === $file) continue;
// do something with the file
}
closedir($handle);
}
?>
Utilisez la fonction scandir()
:
<?php
$directory = '/path/to/files';
if (! is_dir($directory)) {
exit('Invalid diretory path');
}
$files = array();
foreach (scandir($directory) as $file) {
if ('.' === $file) continue;
if ('..' === $file) continue;
$files[] = $file;
}
var_dump($files);
?>
Vous pouvez également utiliser FilesystemIterator
. Il nécessite encore moins de code que DirectoryIterator
et supprime automatiquement .
et ..
.
// Let's traverse the images directory
$fileSystemIterator = new FilesystemIterator('images');
$entries = array();
foreach ($fileSystemIterator as $fileInfo){
$entries[] = $fileInfo->getFilename();
}
var_dump($entries);
//OUTPUT
object(FilesystemIterator)[1]
array (size=14)
0 => string 'aa[1].jpg' (length=9)
1 => string 'Chrysanthemum.jpg' (length=17)
2 => string 'Desert.jpg' (length=10)
3 => string 'giphy_billclinton_sad.gif' (length=25)
4 => string 'giphy_shut_your.gif' (length=19)
5 => string 'Hydrangeas.jpg' (length=14)
6 => string 'Jellyfish.jpg' (length=13)
7 => string 'Koala.jpg' (length=9)
8 => string 'Lighthouse.jpg' (length=14)
9 => string 'Penguins.jpg' (length=12)
10 => string 'pnggrad16rgb.png' (length=16)
11 => string 'pnggrad16rgba.png' (length=17)
12 => string 'pnggradHDrgba.png' (length=17)
13 => string 'Tulips.jpg' (length=10)
Vous pouvez utiliser ce code pour parcourir un répertoire récursivement:
$path = "/home/myhome";
$rdi = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::KEY_AS_PATHNAME);
foreach (new RecursiveIteratorIterator($rdi, RecursiveIteratorIterator::SELF_FIRST) as $file => $info) {
echo $file."\n";
}
glob () contient des dispositions pour le tri et la recherche de motifs. Comme la valeur de retour est un tableau, vous pouvez faire presque tout ce dont vous avez besoin.
Pour être complet (puisque cela semble être une page à trafic élevé), n'oublions pas le bon vieux dir()
function :
$entries = [];
$d = dir("/"); // dir to scan
while (false !== ($entry = $d->read())) { // mind the strict bool check!
if ($entry[0] == '.') continue; // ignore anything starting with a dot
$entries[] = $entry;
}
$d->close();
sort($entries); // or whatever desired
print_r($entries);