Good to Know Database

Datei- und Ordnergröße mit PHP ermitteln


1. Einleitung

In diesem Tutorial möchte ich ein kleines Script vorstellen mit welchem man die Größe einer Datei oder eines ganzen Ordners inklusive Unterordner ermitteln kann.

2. Das Script

Wenn Sie das folgende Script verwenden wollen, kopieren Sie den kompletten Sourcecode den Sie im nächsten Kapitel finden in eine Datei mit der Endung ".php".

Im ersten Abschnitt des Scripts wird eine Funktion mit dem Namen get_size() erstellt welche die Datei-/Ordnergröße ermittelt. Damit die Funktion die Größe ermitteln kann, muss ihr mitgeteilt werden welche Datei bzw. welcher Ordner ausgelesen werden soll und mit welchem Startwert die Messung beginnen soll.

<?php
  function get_size($path,$size)
    {

Nachdem die Funktion aufgerufen wurde, wird zuerst überprüft ob es sich um eine Datei oder einen Ordner handelt. Wurde ein Dateiname an die Funktion übergeben, so wird deren Größe ermittelt und zu dem Startwert addiert.

      if(!is_dir($path))
        {
          $size+=filesize($path);
        }

Handelt es sich um einen Ordner, so wird der Ordnerinhalt ausgelesen, die einzelnen Dateigrößen ermittelt und zu $size addiert. Wird in dieser Schleife ein Ordner gefunden, wird die Funktion get_size() ein weiteres Mal mit dem gefundenen Ordnernamen und der bisherigen Größe aufgerufen.

      else
        {
          $dir = opendir($path);
          while($file = readdir($dir))
            {
              if(is_file($path."/".$file))
                $size+=filesize($path."/".$file);
              if(is_dir($path."/".$file) && $file!="." && $file!="..")
                $size=get_size($path."/".$file,$size);
            }
        }

Wenn alle Dateien und Unterordner überprüft wurden, wird die Funktion beendet und die errechnete Gesamtgröße zurückgegeben.

      return($size);
    }

Hier wird nun die Funktion get_size() aufgerufen und der Rückgabewert in die Variable $size geschrieben.

  $size = get_size("directory",0);

Wie bereits oben erwähnt, wird die Funktion get_size() mit den Parametern für den
Datei-/Ordnernamen (hier z.B. für das Verzeichnis "directory") sowie des Startwertes aufgerufen.

Damit die Größe nicht nur in Bytes angezeigt wird, wird im folgenden Abschnitt der Wert solange umgerechnet bis der Wert die größtmögliche Maßeinheit hat.

  $measure = "Byte";
  if ($size >= 1024)
    {
      $measure = "KB";
      $size = $size / 1024;
    }
  if ($size >= 1024)
    {
      $measure = "MB";
      $size = $size / 1024;
    }
  if ($size >= 1024)
    {
      $measure = "GB";
      $size = $size / 1024;
    }

Nach dieser Umrechnung, hat der Wert in der Variable $size vermutlich mehrere Nachkommastallen. Um diese abzuschneiden verwenden wir den folgenden Befehl.

  $size = sprintf("%01.2f", $size);

Jetzt müssen wir die Datei-/Ordnergröße nur noch mit der dazugehörigen Maßeinheit ausgeben.

  echo $size . " " . $measure;
?>

3. Das komplette Script

Hier möchte ich nochmal den kompletten Sourecode zur Verfügung stellen.

<?php
  function get_size($path,$size)
    {
      if(!is_dir($path))
        {
          $size+=filesize($path);
        }
      else
        {
          $dir = opendir($path);
          while($file = readdir($dir))
            {
              if(is_file($path."/".$file))
                $size+=filesize($path."/".$file);
              if(is_dir($path."/".$file) && $file!="." && $file!="..")
                $size=get_size($path."/".$file,$size);
            }
        }
      return($size);
    }

  $size = get_size("directory",0);
  $measure = "Byte";
  if ($size >= 1024)
    {
      $measure = "KB";
      $size = $size / 1024;
    }
  if ($size >= 1024)
    {
      $measure = "MB";
      $size = $size / 1024;
    }
  if ($size >= 1024)
    {
      $measure = "GB";
      $size = $size / 1024;
    }
  $size = sprintf("%01.2f", $size);
  echo $size . " " . $measure;
?>


Dieser Eintrag wurde am 12.03.2006 erstellt und zuletzt am 19.04.2009 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_4_568.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer