Teil von  SELFPHP
Professional CronJob-Service

Suche

International PHP Conference


WebTech Conference


:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 
PHP Summit


Software Architecture Summit


:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
HTML5 Days


JavaScript Days


:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Speichergröße eines Verzeichnisses ermitteln

Am Ende der Seite finden Sie das komplette Beispiel als Download.

Systemvoraussetzung

  • Linux
  • Windows
  • PHP 3
  • PHP 4
  • PHP 5

Datei(en)

directory_size.php

Problem


Sie möchten gerne wissen, wie viel Speicher Ihre Dateien in einem bestimmten Verzeichnis oder in allen Verzeichnissen verbrauchen? Das nachfolgende Beispiel erledigt diese Aufgabe. Sie können dabei nur ein Verzeichnis oder auch seine Unterverzeichnisse durchsuchen lassen.


Lösung

Im folgenden Beispiel werden wir ein Programm vorstellen, das entweder den Speicherverbrauch für ein einzelnes Verzeichnis auflistet oder rekursiv auch für die in dem angegebenen Verzeichnis befindlichen Unterverzeichnisse. Je nachdem, wie groß das Datenaufkommen ist, wird der Wert in Kilobyte oder Megabyte ausgegeben.

function dir_size($dir, &$size, $recursive=TRUE)
   @param   string     $dir
   @param   integer   &$size
   @param   bool       $recursive
   @return   bool

Die Funktion dir_size() erwartet als Parameter das Verzeichnis ($dir z. B. „Bilder/“) von dem aus die Speichergröße ermittelt werden soll, die Variable $size als Referenz für die Speicherung der Gesamtgröße in Byte und $recursive (FALSE – durchsucht nur das angegebene Verzeichnis; TRUE durchsucht auch alle Unterverzeichnisse).

Nach Aufruf von scan_dir() durchläuft die Funktion das aktuelle Verzeichnis (37). Jedes Verzeichnis beginnt mit einem . (Punkt) und einem .. (Punkt Punkt), die auch als „Dateien“ eingelesen werden.

Sollte unsere Funktion diese beide Pseudodateien finden (43), so bricht sie den aktuellen Schleifendurchlauf (42) ab und fährt mit der nächsten Datei oder dem nächsten Verzeichnis fort.

Sollten Sie bei der Parameterangabe der Funktion (35) $recursive=FALSE gesetzt haben, werden keine Unterverzeichnisse ausgelesen. Die Überprüfung (47) hierfür findet dann ebenfalls in dem Schleifendurchlauf statt. Findet die Funktion im aktuellen Verzeichnis ein weiteres Unterverzeichnis (52), ruft sie sich mit dem Pfad zum Unterverzeichnis als Parameter erneut auf (35) und durchläuft dann das Unterverzeichnis.

Findet die Funktion eine Datei (54), so addiert (55) sie die Dateigröße zu unserem bisher ermittelten Wert (in Byte). Da wir die Variable $size als Referenz übergeben haben, müssen wir diese nicht explizit zurückgeben, da Sie außerhalb dieser Funktion bereits bekannt ist und den Wert vorliegen hat.

035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
function dir_size($dir, &$size$recursive=TRUE) {

    
$handle = @opendir($dir);
    
    if(!
$handle)
        return 
false;
    
    while (
$file = @readdir ($handle)) {
        if (
eregi("^\.{1,2}$",$file)) {
            continue;
        }
        
        if(!
$recursive && $dir != $dir.$file."/") {
            if(
is_dir($dir.$file))
                continue;
        }
        
        if(
is_dir($dir.$file)) {
            
dir_size($dir.$file."/"$size$recursive);
        } else {
            
$size += filesize($dir.$file); 
        }
    }

    @
closedir($handle);

}
Beispiel 7.7: directory_size.php

function sizeMath($size)
   @param   integer   $size
   @return   integer   $size

Die Funktion sizeMath() erwartet als Parameter die Größe aller Dateien in Bytes. Wir rechnen in dieser Funktion lediglich die Werte für eine ansprechende Darstellung um. Bei dem übermittelten Wert handelt es sich um Byte, die wir entweder in Kilobyte oder Megabyte umrechnen wollen.

Sollte der Wert größer oder gleich 1 Million sein (73), handelt es sich bei der Ausgabe um Megabyte und wir formatieren die Ausgabe so, dass nur noch zwei Stellen hinter dem Komma angezeigt werden (75). War der Wert kleiner (76), formatieren wir ihn nach Kilobyte (78).

Zum Schluss müssen wir nur noch den formatierten Wert an die aufrufende Stelle zurückgeben (81).

071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
function sizeMath($size) {
    
    if(
$size >= 1000000) {
        
$size $size 1000000;
        
$size sprintf("%01.2f"$size) . ' MegaByte';
    } else {
        
$size $size 1000;
        
$size sprintf("%01.1f"$size) . ' KiloByte';
    }
    
    return 
$size;
    
}
Beispiel 7.8: directory_size.php

Der restliche Programmcode ist wieder sehr schnell erklärt. Wir setzen zuerst die Variable $size (85) auf den Wert 0 (Null), die wir innerhalb der Funktion als Referenz übergeben. Wir rufen im nächsten Schritt die Funktion dir_size() (87) für die Berechnung der Speichergröße auf und übergeben ihr das zu durchsuchende Verzeichnis, $size für die Speichergröße und den booleschen Wert „TRUE“ oder „FALSE“. Geben Sie „TRUE“ an, werden auch alle Unterverzeichnisse mit durchsucht, ansonsten nur das aktuelle Verzeichnis.

Wir erhalten von dieser Funktion keinen Rückgabewert, da wir ja die Variable $size als Referenz übergeben haben und somit der Wert außerhalb der Funktion bereits mit der Größe vorliegt.

Wir müssen lediglich die Größe formatieren. Dafür geben wir den Wert in Byte an die Funktion sizeMath() (89) und erhalten als Rückgabewert entweder einen formatierten Wert in Kilobyte oder Megabyte.

085:
086:
087:
088:
089:
090:
091:
$size 0;

dir_size("bilder/"$sizeTRUE);

$sizeD sizeMath($size);

echo 
$sizeD;
Beispiel 7.9: directory_size.php

Ausgabe im Browser

476.2 Kilobyte


 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   1.07 Kilobyte 1.22 Kilobyte 1.14 Kilobyte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

MECO Systemhaus GmbH & Co. KG weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Zend Technologies GmbH weitere Sponsoren
 

:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 
 

Ausgewählter Tipp im Bereich PHP-Skripte


Captcha mit Rechenaufgaben und Buchstaben/Zahlenkombinationen

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


PHP Tag Cloud dynamisch erstellen

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2014 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de