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