[PHP] afficher/compter le contenu d'un repertoire [résolu]

Salut tout le monde

Je dois afficher le contenu d’un repertoire et de ses sous repertoires.
Comme je connais rien en PHP, j’ai pompé une source (qui affiche mais qui compte pas) trouvée sur le net et je l’ai modifiée.

[cpp]

<?php $path = "./docs"; ?> <?php $count = 0; recursive_display("./irsam_net/fileadmin/docs"); echo "count: ".$count; ?>
<?php

function recursive_display($path) {
$i = 0;
$O = dir($path);
if(!is_object($O)) return false;

if ($folder != "") {
	echo "<tr bgcolor='#166fb7'><td width='35'>[img]folder.gif'></td>";
	echo "<td>[b]<font color='white'>".$folder."[/b]</td>";  
	echo "</tr>";
}
 
while($file = $O -> read()) {

    if($file != '.' &amp;&amp; $file != '..') {
        if(is_file($path.'/'.$file)) {
            $i = $i + 1;
            if ($i%2 == 1) {
            	echo "<tr bgcolor='#b0bace'><td></td><td>".$file."</td></tr>";
            	$count = $count +1;
        	}
            else {
                echo "<tr bgcolor='#d8dde7'><td></td><td>".$file."</td></tr>";
            }
            
        }
        else
        {
            if(is_dir($path.'/'.$file)) recursive_display($path.'/'.$file);
        }
    }
}


// !!!! il faut bien apeller 2 fois la methode close() !!!
$O -> close();
$O -> close();

return true;
}

?>
[/cpp]

L’affichage marche impec mais pas le comptage.
Ca me donne toujours 0 et en plus ça m’affiche le résultat avant l’affichage bien que l’appel de la fonction se trouve avant.

Je pige pas pourquoi mais peut etre que pour les pros du PHP, ca sera évident.

Merci :jap:

Ta variable $count que tu définis à 0 au début de ton programme ne sera pas reconnu dans ta fonction. Lorsque tu définis une fonction, la portée d’une variable définie dans cette fonction est locale à la fonction. Une solution serait de déclarer ta variable en global.

Solution possible:

[cpp]

<?php $path = "./docs"; ?> <?php global $count; $count = 0; recursive_display("./irsam_net/fileadmin/docs"); echo "count: ".$count; ?>
<?php

function recursive_display($path) {
global $count;
$i = 0;
$O = dir($path);
if(!is_object($O)) return false;

if ($folder != "") { 
    echo "<tr bgcolor='#166fb7'><td width='35'>[img]folder.gif'></td>"; 
    echo "<td>[b]<font color='white'>".$folder."[/b]</td>";   
    echo "</tr>"; 
} 
  
while($file = $O -> read()) { 

    if($file != '.' &amp;&amp; $file != '..') { 
        if(is_file($path.'/'.$file)) { 
            $i = $i + 1; 
            if ($i%2 == 1) { 
                echo "<tr bgcolor='#b0bace'><td></td><td>".$file."</td></tr>"; 
                $count = $count +1; 
            } 
            else { 
                echo "<tr bgcolor='#d8dde7'><td></td><td>".$file."</td></tr>"; 
            } 
             
        } 
        else 
        { 
            if(is_dir($path.'/'.$file)) recursive_display($path.'/'.$file); 
        } 
    } 
} 
 
 
// !!!! il faut bien apeller 2 fois la methode close() !!! 
$O -> close(); 
$O -> close(); 
 
return true; 
} 

?>
[/cpp]

La deuxième solution ça serait de renvoyer le nombre de fichiers en retour de ta fonction…

essaye de mettre global $count juste avant $i = 0

:heink: :??:

merci à tous les 2

p’tite question encore: pourquoi ça m’affiche count: 80 puis APRES le listing des répertoires

la raison est simple : ton listing se fait dans un tableau, toi tu affiche count directement comme ça en plein milieu du tableau, le navigateur ne sachant pas trop quoi en faire il l’affiche à qui mieux mieux…

Il suffirait de mettre ton echo "count: ".$count; juste après ta balise de fermeture de tableau :

bien vu :stuck_out_tongue: