Quand on souhaite qu'une fonction ne retourne pas qu'un seul résultat, on peut utiliser les tableaux, y compris multi-dimensionnels (cf. fr.php.net/array). J'en profite pour utiliser la fonction de formatage des unités de taille de fichiers, d'un sympathique contributeur de www.php.net (je ne retrouve plus le topic !)
# fonction de formatage des unités de taille d'un fichier # source : contributeur de http://www.php.net/ function do_bytes($size) { $ko = 1024; // Kilo octets $mo = 1024 * $ko; // Mega octets $go = 1024 * $mo; // Giga octets $to = 1024 * $go; // Tera octets if($size == 0) return "n/a"; if($size < $ko) return $size." octets"; if($size < $mo) return sprintf("%01.1f", $size/$ko,2)." Ko"; if($size < $go) return sprintf("%01.1f", $size/$mo,2)." Mo"; if($size < $to) return sprintf("%01.1f", $size/$go,2)." Go"; return sprintf("%01.1f", $size/$to,2)." To"; } # fonction de scan de $repertoire function scanFichiers($repertoire){ # ouverture du répertoire $handle = @opendir($repertoire); # lecture des fichiers while ($fichier = @readdir($handle)) { if ($fichier == "." || $fichier == "..") continue; if (is_dir($repertoire.$fichier)) continue; # on pourrait limiter le scan à un ou plusieurs types de fichiers # if (!preg_match("/\.php|\.htm/i", $fichier)) continue; $q_fichier++; $t_fichier += filesize($repertoire.$fichier); $n_fichier[] = $fichier; # nom des fichiers dans un tableau } # fermeture du répertoire et tri des noms de fichiers @closedir($handle); @sort($n_fichier); # implémentation de $tableau avec trois items $tableau['taille'] = $t_fichier; # taille totale des fichiers $tableau['nombre'] = $q_fichier; # nombre de fichiers $tableau['noms'] = $n_fichier; # noms des fichiers return $tableau; } # exécution : transmission du répertoire à scanner dans l'URL if(!$repertoire = $_GET['repertoire']) $repertoire = "./"; # sinon répertoire courant par défaut $tableau = scanFichiers($repertoire); # affichage de la taille totale avec conversion echo "Taille totale : ".do_bytes($tableau['taille']); echo "<br>Nombre de fichiers : ".$tableau['nombre']; echo "<br>Noms : "; # lecture du tableau 'noms' foreach($tableau['noms'] as $val) echo "<br>$val";
Attention : foreach fr2.php.net/foreach n'accepte pas de valeur vide. On peut alors utiliser la structure classique for fr2.php.net/for
for($i=0; $i<count($tableau['noms']); $i++) echo "<br>".$tableau['noms'][$i];
Une alternative, partant du principe qu'au moins un item du tableau sera implémenté, est de lire le tableau en deux boucles.
foreach($tableau as $key => $val) { echo "$key :"; # $val n'est pas un tableau if(!is_array($val)) { echo " $val<br>"; # sinon lecture du tableau $val } else { foreach($val as $value) echo "<br>$value"; } }
http://dev.ppan.net