PHP – Mostrare la dimensione di una cartella

Se avete un’area di gestione file, o comunque avete bisogno di mostrare la dimensione occupata in una determinata cartella, sottocartelle incluse, lo script che segue potrebbe fare per voi.

Il codice tiene conto dei DIRECTORY_SEPARATOR e non si limita ai file della cartella selezionata: scorre tutti i file delle cartelle annidiate.

Andiamo a vederlo.

Download script

Recuperare le dimensioni di una cartella e delle sottocartelle – La funzione nel dettaglio

Per comodità ho inserito i commenti nel codice stesso, che dovrebbe risultare sufficientemente comprensibile.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function foldersize($dirname) {	
    // se la cartella non esiste o non ha i permessi di lettura, ritorno false
    if (!is_dir($dirname) || !is_readable($dirname))
        return false;

    // immagazzino la cartella nell'array
    $dirname_stack[] = $dirname;
    $size = 0;

    do {
	// assegno a $dirname il primo elemento di $dirname_stack e lo tolgo dall'array
        $dirname = array_shift($dirname_stack);
        $handle = opendir($dirname);
	// scorro tutti i file presenti
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..' && is_readable($dirname . DIRECTORY_SEPARATOR . $file)) {
                if (is_dir($dirname . DIRECTORY_SEPARATOR . $file)) {
		    // inserisco nell'array il nome e l'indirizzo del file
                    $dirname_stack[] = $dirname . DIRECTORY_SEPARATOR . $file;
                }
		// aggiunge la dimensione di ogni file
                $size += filesize($dirname . DIRECTORY_SEPARATOR . $file);
            }
        }
	// chiude la directory
        closedir($handle);
    } while (count($dirname_stack) > 0);

    return $size;
}

Il concetto dello script è che vengono inserite in un array le cartelle da scorrere, e con array_shift l’indirizzo viene associato alla variabile $dirname e sottratto dall’array.

In questo modo il ciclo si ferma quando l’array risulta vuoto, cioè sono state lavorate tutte le cartelle o sottocartelle.

Trasformare le dimensioni da byte a megabyte

Filesize restituisce il valore in byte, quindi per mostrare i kilobyte si deve moltiplicare per 1024.
Per mostrare i megabyte, si deve moltiplicare per 1024*1024.

Se dovessi leggere il contenuto della cartella “file” e mostrare i megabyte ottenuti, si procede così

1
2
$mb_occupati=foldersize("file")/(1024*1024);
echo ceil(($mb_occupati))." MB";

In questo modo mostro i megabyte arrotondati per eccesso (per evitare tutte le virgole dei byte).

Etichette:, ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *