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
codice:
if ($cartella = opendir($path)) {
while (false !== ($file = readdir($cartella))) {
if (!preg_match("#^..?$#", $file)) {
$numero = contaFile($path);
echo "$numero
";
}
}
closedir($cartella);
}
metti solo
codice:
$numero = contaFile($path);
echo "$numero
";
Facendo così nel mio caso ottengo 11 una sola volta.
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
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;
}
se invece non è ciò che volevi spiegami meglio la cosa.
Ciao