[PHP]Listato di una directory e sua dimensione

Siccome gestisco un sito d'appunti in cui sono presenti molti sorgenti liberamente scaricabili e raggruppati in directory,sarebbe carino poterli elencare tutti insieme in una pagina sola. A tal fine ho combinato e modificato alcune funzioni dei commentatori di php.net al mio scopo. Ecco le funzioni: la prima permette di dare un output più umanamente leggibile al numero di bytes forniti in input come parametro alla funzione.


function size_readable($size, $retstring = null) {
// adapted from code at http://aidanlister.com/repos/v/function.size_readable.php
$sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
if ($retstring === null) { $retstring = '%01.2f %s'; }
$lastsizestring = end($sizes);
foreach ($sizes as $sizestring) {
if ($size < 1024) { break; }
if ($sizestring != $lastsizestring) { $size /= 1024; }
}
if ($sizestring == $sizes[0]) { $retstring = '%01d %s'; } // Bytes aren't normally fractional
return sprintf($retstring, $size, $sizestring);
}


La seconda funzione scansiona una directory e fornisce in output i files e directory ivi contenuti,omettendo la directory corrente (".") e quella superiore (".."). Dà altresì come risultato il numero di files la loro dimensione,così come la dimensione totale dei files che occupano la cartella. Usiamo la funzione precedente per l'output sulla dimensione dei files.

function scan_dir($path) {
$dir = $path;
$counter_files = $size = 0;
$string = "";
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file == "." || $file == "..") continue;
$counter_files++;
$string.= "- $file - ".filetype($dir."/".$file)." ".filesize($dir."/".$file)." bytes
";
$size+=filesize($dir."/".$file);
}
closedir($dh);
}
echo "Directory contenente $counter_files files e occupante ".size_readable($size)."
Lista:
";
echo $string;
}
}

Il risultato dell'uso di queste due funzioni lo potete vedere qui.
Se invece volete qualcosa di molto più fico,vi suggerisco snif (simple and nice index file). Potete vedere la demo qui e il suo codice sorgente qui.

0 comments:

Byte Strike Blog - Designed by Posicionamiento Web | Bloggerized by GosuBlogger