Ciao,
lo script che hai postato fa un ciclo while su tutti gli oggetti (cartelle e file) della cartella indicata in path e, per ciascuno di loro, chiama la funzione contaFile che conta i file (solo i file) presenti nella cartella. Questo numero viene poi stampato a video.
Chiaramente non è una buona gestione perché la funzione viene richiamata n volte per fare sempre la stessa cosa.
Io, per esempio l'ho inserito in una cartella che contiene 11 file e 3 sottocartelle e ho indicato "./" nel path e ottengo 14 volte il numero 11.
Ora, non ho ben capito tu cosa vuoi fare, se vuoi contare i file e ottenere il risultato una sola volta devi eliminare il ciclo while cioè, invece di
metti solocodice:if ($cartella = opendir($path)) { while (false !== ($file = readdir($cartella))) { if (!preg_match("#^..?$#", $file)) { $numero = contaFile($path); echo "$numero "; } } closedir($cartella); }
Facendo così nel mio caso ottengo 11 una sola volta.codice:$numero = contaFile($path); echo "$numero ";
Se invece vuoi che ti restituisca solo il numero di sottocartelle (nel mio caso sarebbe 3), fermo restando che devi togliere il ciclo e lasciare solo le due istruzioni che ti ho detto, devi anche cambiare "is_file" con "is_dir" e aggiungere la preg_match (riferita a $entry) per filtrare le due directory fittizie
se invece non è ciò che volevi spiegami meglio la cosa.codice:function contaFile($path) { $count = 0; $dir = opendir($path); while (($entry = readdir($dir)) !== false) if (!preg_match("#^..?$#", $entry)) if (is_dir($entry)) ++ $count; closedir($dir); return $count; }
Ciao

Rispondi quotando