PHP-Dateisystem-DirSize Wie?

DerDu
Ich weiß, das ich rekursiv alle Verzeichnisse und die darin enthaltenen Dateien durchgehen könnte um die Größen zu summieren, aber das dauert bei einer großen Verzeichnissstruktur recht lange, daher wüsste ich gern, ob es schon irgendeine integrierte Funktion oder schnellere Möglichkeit gibt das durchzuführen.

thx DD
vapor
Machs halt mit ner Schleife cool
neonator
ich denke, du willst die grösse eines ordners hab, d.h. alle dateien in allen unterordner einbezogen.. das hab ich auch mal gebastelt.. funktioniert bei mir auf linux, auf win nicht getestet, sollte aber funktionieren:
php:
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:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
<?

 
  function formatFSize($bytes) {
    if($bytes>=1024) {
      $kb        $bytes 1024;
      if($kb>=1024) {
        $mb      $kb 1024;
        if($mb>=1024) {
          $gb    $mb 1024;
          return round($gb,1)." GB";
        }
        else {
          return round($mb,1)." MB";
        }
      }
      else {
        return round($kb,1)." KB";
      }
    }
    else {
      return $bytes." Bytes";
    }
  }
  
  $_dirsizes        = array();
  
  function dirsize($dir,$space='') {
    global $_dirsizes;
    // calculate the size of files in $dir, (it descends recursively into other dirs)
    if(!is_dir($dir)) {
      return false;
    }
    $dh       = @opendir($dir);
    if(!$dh) return false;
    $size     0;
    while(($file readdir($dh))!==false)
      if($file!="." && $file!="..") {
        $path $dir."/".$file;
        if(is_dir($path)) {
           $out_space $space."&nbsp;&nbsp;&nbsp;&nbsp;";
           $dirsize   dirsize($path,$out_space);
           $size += $dirsize;
           if(strstr(formatFSize($dirsize),"MB")) {
             array_unshift($_dirsizes,$space."<font color=red>&raquo; {".formatFSize($dirsize)."}".$path."</font><br>\r\n");
           }
           elseif($space=="&nbsp;&nbsp;&nbsp;&nbsp;") {
             array_unshift($_dirsizes,$space."<font color=green>&raquo; {".formatFSize($dirsize)."}".$path."</font><br>\r\n");
           }
           else {
             array_unshift($_dirsizes,$space."&raquo; {".formatFSize($dirsize)."}".$path."<br>\r\n");
           }
        }
        elseif (is_file($path))
           $size += filesize($path);
    }
    closedir($dh);
 
    return $size;
  }

echo formatFSize(dirsize("../../"));
echo "<br><hr><br>";
echo implode("",$_dirsizes);
?>


ne, wart das zeigt die ganze datei-strucktur an... vielleicht kannst du's gebrauchen.. ich such mal die funktion...

[edit] hab nix anderes gefunden...
DerDu
es bleibt mir also vorerst nicht erspart das mit ner rekursiven schleife durchzuzählen.. heulen

bei kleinen datenmengen ist das auch ok, aber es muss doch auch einen schnelleren Weg geben.. wie machen denn das die ganzen Fileserver.. soll ich wirklich nebenher ne art DB als "Redundante Indexierung" für solche "Zusatzinfos" mitlaufen lassen, damit ich die daten gleich zur verfügung hab und nich erst bei aufruf der seite zählen muss???