Lister le contenu brut
On va commencer par lister comme des brutes ce qu’il y a dans le dossier pointé. Ici on pointe sur le répertoire courant, celui où est placé notre fichier.
Voir la définition de opendir sur php.net
<?php
$dir = "./";
// si le dossier pointe existe
if (is_dir($dir)) {
// si il contient quelque chose
if ($dh = opendir($dir)) {
// boucler tant que quelque chose est trouve
while (($file = readdir($dh)) !== false) {
// affiche le nom et le type
echo "fichier : $file : type : " . filetype($dir . $file) . "<br />\n";
}
// on ferme la connection
closedir($dh);
}
}
?>C’est brut de brut car les deux premiers items de la liste sont "." et ".." qui sont des éléments du serveurs, pas censés être vus.
On peut affiner un peu pour les masquer :
<?php
$dir = "./";
// si le dossier pointe existe
if (is_dir($dir)) {
// si il contient quelque chose
if ($dh = opendir($dir)) {
// boucler tant que quelque chose est trouve
while (($file = readdir($dh)) !== false) {
// affiche le nom et le type si ce n'est pas un element du systeme
if( $file != '.' && $file != '..') {
echo "fichier : $file : type : " . filetype($dir . $file) . "<br />\n";
}
}
// on ferme la connection
closedir($dh);
}
}
?>Voilà . On peut affiner le script pour n’afficher que les dossier ou n’afficher que les fichiers, en testant le type. On peut aussi afficher les dossiers puis les fichiers, on peut aussi faire des liens sur les noms de fichiers pour les ouvrir, bref on peut faire beaucoup de chose.
Pour pouvoir afficher uniquement les images, on placera par exemple en plus du test sur les elements système :
if( $file != '.' && $file != '..' && preg_match('#\.(jpe?g|gif|png)$#i', $file)) {C’est une expression régulière qui vérifie que le fichier se termine par une des extensions d’image web : jpeg, jpg, gif ou png. Les expressions régulières sont un outil puissant mais parfois difficile à manipuler. Les coder, ou faire des recherches sur le net pour trouver la bonne est parfois casse-tête. Mais quand ça marche, c’est puissant.
On peut donc faire la même chose pour sélectionner d’autres types de fichiers.