wolli: Verzeichnis/Dateigröße

Hallo Prog's

hatte das Problem, dass ich ein Script suchte, welches mir bei Aufruf
den genutzten Space eines Verzeichnisses inklusive aller Unterverzeichnisse und enthaltener files zeigt.

Hab nun eins gefunden :-)

Da ich aber Anfänger bin, hab ich keine Ahnung wie ich das Script
ansprechen muß.
wie gesagt, das Script soll in mein Hauptverzeichnis und bei Aufruf
mir den genutzten Space meiner Homepage anzeigen.

Für Eure Hilfe wäre ich wirklich dankbar.

Hier nun das gefunde Script

<?
function humansize($size) {
$n = 0;
while (($size > 1024) and ($n < 3)) {
$size /= 1024;
$n++;
}
if ($size - floor($size) == 0)
$size = (int) $size;
else
$size = round($size,2);
switch ($n) {
case 0:
return $size."B";
break;
case 1:
return $size."KB";
break;
case 2:
return $size."MB";
break;
default:
return $size."GB";
break;
}
}

and if you are looking for a function that calculates the size of a
directory, including all subdirectories and files, look at this:

function dirsize($dir) {
$dh = opendir($dir);
$size = 0;
while (($file = readdir($dh)) !== false)
if ($file != "." and $file != "..") {
$path = $dir."/".$file;
if (is_dir($path))
$size += dirsize($path);
elseif (is_file($path))
$size += filesize($path);
}
closedir($dh);
return $size;
}

?>

  1. Da ich aber Anfänger bin, hab ich keine Ahnung wie ich das Script
    ansprechen muß.

    Ganz einfach. Du baust die zwei Funktionen in deine PHP-Seite ein - oder noch besser, du speicherst die in einer separaten Datei und bindest diese Datei mit dem Befehl

    include("externedatei.php");

    in deine Seite ein (wenn du mehrere Seiten hast, mußt du bei Veränderungen nicht alle Seiten bearbeiten, sondern nur einmal zentral).

    Der Funktionsaufruf ergibt sich aus der Funktionsdefinition. Du hast zwei Funktionen, von denen dir aber nur eine die Größe des Verzeichnisses liefert:

    function dirsize($dir)

    Ein kurzer Blick zeigt, daß die Funktion die Angabe des Verzeichnisses erwartet, desse Größe du wissen willst. Der Aufruf erfolgt mittels

    $groesse=dirsize("verzeichnis");

    wobei "verzeichnis" auch eine Variable mit dem Verzeichnis sein kann, und sie darf zwar auch $dir heißen, muß es aber nicht zwingend.

    Hinterher hast du die Größe des Verzeichnisses und aller Unterverzeichnisse in $groesse in Byte.

    Wenn du das in lesbarer Form drucken willst, hilft dir die erste Funktion.

    Beispiel:
    echo "Das Verzeichnis ist ".humansize($groesse)." groß";

    Die Funktion nimmt eine Zahl in Byte entgegen und wandelt sie in die größte mögliche Einheit (KB, MB, GB), die noch Zahlen größer als 1 vor dem Komma hat. Die Einheit wird automatisch drangehängt, du erhälst also keine Zahl zurück, sondern einen String, der im Beispiel oben direkt ausgegeben wird. Es macht Sinn, so vorzugehen und den String nicht noch irgendwo zwischenzuspeichern, denn die Funktion rundet, dir gehen also Nachkommastellen verloren. Du solltest die Bytezahl speichern und bei Bedarf humansize aufrufen, wenn du eine Druckausgabe haben willst. Natürlich kannst du auch die Bytezahl direkt ausgeben, aber das ist nicht unbedingt sehr übersichtlich, und man muß schon genau hinsehen, um festzustellen, ob da schon Gigabyte stehen oder noch Megabyte.

    - Sven Rautenberg