[PHP] Ordnergrösse ermitteln (+ Unterordner) - Was ist zu beachten?

Sascha91

KlammID: 236083
ID: 236083
L
4 Mai 2006
148
2
Guten Abend

Seit einigen Tagen bin ich immerwieder am Scripte suchen die mir die Grösse eines bestimmten Ordners auslies. Allerdings stimmt diese Angaben bei allen getesteten (etwa 4 verschieden) nicht. Gibt es irgendetwas zu beachten? Kann man mit dir_size() und filesize() bestimmte Dateinamen (Zahlen, Lehrschläge, Sonderzeichen etc.) nicht auslesen? :(
 
filesize() sollte eigentlich überall funktionieren. dir_size() kenn ich ned :think:

Um mögliche Unterordner mit in die Rechnung einzubeziehen, musst du halt einen rekursiven Ansatz wählen.
 
Uff... überfordere mich nicht. Ich hab nicht wirklich viel Ahnung von PHP. Was heisst "rekursiven Ansatz"?

Hier mal einige Beispiele
PHP:
$path = "F:/Programme/xampp/htdocs/neu/2/gallerie/";
$handle=opendir ($path);
$summe03 = 0;

while (false !== ($file = readdir ($handle)))
{
    if ($file !== "." && $file !== "..")
    {        
        if (true == is_dir($path.$file))
        {
            $path = $path.$file."/";
            $handle=opendir ($path);
        }
        else
        {
        $summe03 += filesize($path.$file);
        }
    }
}
PHP:
$verzeichnis = "F:/Programme/xampp/htdocs/neu/2/";
function dir_size($verzeichnis, $size = 0) {
    $handle = opendir($verzeichnis);

    while ($file = readdir($handle)) {
        if ($file == '.' || $file == '..') continue;

        $full_path = $verzeichnis.$file;

        if (is_dir($full_path)) {
            $size = dir_size($full_path.'/', $size);
        } else {
            $size += filesize($full_path);
        }
    }

    closedir($handle);

    return $size;
    $summe01 = $size;
}
 
Das obere is wohl mehr quark. Das untere sieht schon korrekter aus.
Zwei Anmerkungen dazu:
  • Nach return wird nix mehr ausgeführt.
  • Den zusätzlichen Parameter $size kannst du dir sparen, weil du ja ganz normal addieren kannst, wie du es bei einer Datei auch machst.
edit:
Hab ich jetzt vergessen, drauf einzugehen. Rekursion hat nix mit PHP zu tun, sondern ist eine allgemeine Methode. Rekursion bedeutet, dass sich eine Funktion selber aufruft, was du ja in deinem Code schon praktizierst (Zeile 11).
 
Uff... überfordere mich nicht. Ich hab nicht wirklich viel Ahnung von PHP. Was heisst "rekursiven Ansatz"?

Hier mal einige Beispiele

Das erste ist doch für einen rekursiven Ansatz gleich gut geeignet:
PHP:
$path = "F:/Programme/xampp/htdocs/neu/2/gallerie/";
function rekursive_groesse($path)
{
    $handle=opendir ($path);
    $summe03 = 0;
    while (false !== ($file = readdir ($handle)))
    {
        if ($file !== "." && $file !== "..")
        {        
            if (true === is_dir($path.$file))
            {
                $summe03 += rekursive_groesse($path.$file."/");
            }
            else
            {
                $summe03 += filesize($path.$file);
            }
        }
    }
    closedir($handle);
    return $summe03;
}
print rekursive_groesse($path);
 
Bei deinem Script (DocTrax) meldet PHP noch zwei Fehler(?).

Warning: readdir(): supplied argument is not a valid Directory resource in F:\Programme\xampp\htdocs\neu\2\about\thispage\r1.php on line 8

Warning: closedir(): supplied argument is not a valid Directory resource in F:\Programme\xampp\htdocs\neu\2\about\thispage\r1.php on line 22
 
PHP:
$path = "F:/Programme/xampp/htdocs/neu/2/gallerie";
function rekursive_groesse($path)
{
    $handle=opendir ($path);
    $summe03 = 0;
    while (false !== ($file = readdir ($handle)))
    {
        if ($file !== "." && $file !== "..")
        {        
            if (true === is_dir($path.$file))
            {
                $summe03 += rekursive_groesse($path."/".$file);
            }
            else
            {
                $summe03 += filesize($path."/".$file);
            }
        }
    }
    closedir($handle);
    return $summe03;
}
print rekursive_groesse($path);
Das liegt vermutlich an dem Slash am Ende - war auch nur als Beispiel gedacht wie man eine Rekursion durchführt.