Mit dem Befehl filesize() erhält man ganz einfach die Dateigrösse einer bestimmten Datei — in Byte. Ist die Datei aber etwas grösser ist eine Grössenangabe in Byte schnell nicht mehr zweckmässig und man sollte andere Einheiten verwenden. Diesen Schritt kann man sehr einfach automatisieren:

<?php
function human_filesize($size$precision 2)
{
   
$a_size = array('B''KiB''MiB''GiB''TiB''PiB');
   
$count  count($a_size) - 1;
   
$i 0;
   while (
$size 1024 >= && $count >= $i) {
       
$size $size 1024;
       
$i++;
   }
   return 
round($size$precision) . ' ' $a_size[$i];
}

// =========
// ANWENDUNG
// =========

// Ausgabe zum Beispiel: 34.35 MiB
echo human_filesize(filesize('datei.zip'));

// Ausgabe zum Beispiel: 34 MiB
echo human_filesize(filesize('datei.zip'), 0);

// Ausgabe zum Beispiel: 34.35465 MiB
echo human_filesize(filesize('datei.zip'), 5);
?>

Diese Funktion ermittelt automatisch die geeignete Einheit und rechnet die Dateigrösse in diese um. Über den zweiten optionalen Parameter kann man die Anzahl Dezimalstellen steuern (siehe Beispiele).

Masseinheiten: Warum KiB und nicht KB?

KiB ist die Abkürzung für Kilo-binary Byte oder KibiByte.

Strenggenommen ist eine Dateigrössen-Angabe in kB (103 = 1000 Byte) falsch, denn gemeint damit sind 1024 Byte (= 210 Byte). Standard konform wäre also die Verwendung von Binärpräfixen wie Kib, MiB, GiB, usw. Leider wird meist trotzdem die falsche Einheit gewählt.

Weiterführende Links