Verzeichnissgrösse ermitteln

radarin

Angesehenes Mitglied
Hallo Liste.
Im einer Bildergallery möchte ich gerne die Verzeichnissgrössen anzeigen. Also die Grössen eintelner Alben sowie die Grösse der kompletten Galerie. Ich sollte auf einen Verzeichniss verweisen können und dann die Grösse aller Dateien erhalten, inkl. Unterverzeichnisse. Bei der Suche hier im Forum bin ich nicht fündig geworden.

Gruss René

P.S., mit PHP
 
Hallo Renè

Das Zauberwort heisst Rekursion!
In Google findest du dazu massenweise Material.


Gruss Peter
 
Auf dieses Stichwort bin ich auch schon gestossen, hat mir aber noch nicht weitergeholfen...
 
Glück Du hast, Yoda zur Hand grad hat was ...

CODE
function get_folder_size($target, $output=false)
{
$sourcedir = opendir($target);
while(false !== ($filename = readdir($sourcedir)))
{
if($output)
{ echo "Processing: ".$target."/".$filename."<br>"; }
if($filename != "." && $filename != "..")
{
if(is_dir($target."/".$filename))
{
// recurse subdirectory; call of function recursive
$totalsize += get_folder_size($target."/".$filename, $exceptions);
}
else if(is_file($target."/".$filename))
{
$totalsize += filesize($target."/".$filename);
}
}
}
closedir($sourcedir);
return $totalsize;
}

 
Danke für Eure Hilfe, das Script von eVolver funktioniert perfekt. Mit etwas weiter suchen bin ich auf ein Script gestossen das die Anzahl Verzeichnisse und die Dateien zählt. Dieses habe ich um eionege Zeilen ergänzt, damit es auch die Dateigrössen zusammen zählt und die Grösse von Bytes in kb, MB oder GB umrechnet. Ist noch ganz interessant dies auf der Startseite der Webseite einzubauen.



CODE
<?PHP
function count_file($dir)
{

// Ueberprueft ob das angegebene Verzeichnis existiert
if(is_dir($dir))
{
$afile[directory]=0;
$afile[file]=0;
$afile[size]=0;

chdir($dir);
$handle=opendir(".");
while($file=readdir($handle))
{

// Handelt es sich bei $file um ein Unterverzeichnis?
if(is_dir($file) && $file!="." && $file!="..")
{

// directory um eins erhoehen
$afile[directory]++;

// rekursiver Aufruf mit aktuellem Verzeichnis
$y=count_file($file);

// Ergebnisse des rekursiven Aufrufs der Funktion zu
// directory, file und size aufaddieren
$afile[directory]+=$y[directory];
$afile[file]+=$y[file];
$afile[size]+=$y[size];
}

// Handelt es sich bei $file um eine Datei?
if(is_file($file))
{

// file um eins erhoehen / dateigrösse addieren
$afile[file]++;
$afile[size] += filesize($file);
}
}

// Verzeichnisstruktur zurueck gehen
if(stristr($dir,"../")) chdir($_SERVER["DOCUMENT_ROOT"].substr($_SERVER["PATH_INFO"],0,strrpos($_SERVER["PATH_INFO"],"/")));
elseif($dir!=".") chdir("../");

closedir($handle);
}

return $afile;
}





function fs_convert ($datei, $nachkommastellen = 0) {
$size = $datei;
if($size >= 1073741824) {
return round($size/(1073741824), $nachkommastellen)." GB";
}

if($size >= 1048576) {
return round($size/(1048576), $nachkommastellen)." MB";
}

if($size >= 1024) {
return round($size/(1024), $nachkommastellen)." KB";
}

return $size." Byte";
}


// Aufruf der Funktion
$dir="./";
$atest=count_file($dir);
echo"<br>DIRECTORIES: ".$atest[directory];
echo"<br>FILES: ".$atest[file];
echo"<br>SIZE: ".$atest[size]." bytes";
echo"<br>SIZE: ".fs_convert($atest[size], 2);


?>





Wer also auch mal nach meiner Frage suchen wird, soll hier fündig werden
 
Zurück
Oben