Home / Programmazione / PHP / Contare i file con PHP
Mattepuffo

Contare i file con PHP

Contare i file con PHP

Ho creato una piccola funzione per contare i file dentro una directory.

A me serve per fare in modo che una immagine, in fase di upload, venga nominata con un suffisso più il numero di file che già ci sono dentro la directory.

Così evito sovrascritture.

Ovviamente l'uso che ne se può fare può variare da caso a caso; inoltre funziona con tutti i tipi di files.

Vediamo questa funzione; state attenti a non nominarla count(), in quanto è una delle funzioni native di PHP.

function countImg() {
$count = 0;
$hd = opendir("../dir");
while (($files_count = readdir($hd)) !== false) {
if ($files_count[0] != ".") {
$count++;
}
}
return $count;
}

Prima di tutto apriamo la directory mettendo il percorso preciso.

Poi nel ciclo while readdir(dir) leggiamo il contenuto della directory; fino a quando non è false il ciclo va avanti.

L'if serve per non leggere il punto; un pò difficile da spiegare a parole, ma se conoscete il comando ls di Linux sapete di che sto parlando.

Nell'if incrementiamo la variabile $count.

Niente di più!

EDIT

Mii sono accorto che, giustamente, lo script conta tutti i files, a prescindere dal tipo.

Quindi se ad esempio dentro una directory abbiamo tutte immagini tranne un file (che magari è txt), il numero totale di file sarà dato dalle immagini più il txt.

Possiamo modificare lo script così per dirgli di considerare solo i tipi di files che vogliamo:

function echoCountImg() {
    $count = 0;
    $hd = opendir("../gallery/pe2011/");
    $ext_ok = array('jpg', 'JPG', 'jpeg', 'JPEG');

    while (($files = readdir($hd)) !== false) {    
        $file = pathinfo($files);
        if (  in_array($file['extension'], $ext_ok)  ) {
            $count++;
        }
    }
    return $count;
}

In pratica andiamo a controllare che l'estensione dei file sia jpg o jpeg (e gli stessi in maiuscolo).

Se così il file viene contato, sennò viene scartato.

 

Grazie a maje del forum ioProgrammo per la dritta!