phpBuddy

Tutorials und Workshops

Wie kann man Daten in eine Datenbank schreiben und wieder auslesen? Wie schützt man sein Gästebuch vor Spam? Wie erstellt man eine Bildergalerie?
Diese und mehr Fragen werden in der Tutorial Rubrik sehr detailliert und leicht verständlich erklärt.

Sie sind hier: Startseite Dateigröße umwandeln
Dateigröße von Byte in kB, MB, GB umwandeln

Dateigröße in lesbares Format umwandeln

Früher oder später benötigt jeder PHP Programmierer mal einen Weg, mit dem man eine Dateigröße, die ja bekanntlich in Byte ausgelesen wird, in ein von Menschen gut lesbares Format umgewandeln kann. Sucht man im Web nach einer passenden Lösung, findet man die abstrusesten und teilweise kompliziertesten mathematischen Formeln, nicht selten in rekursive arbeitende Schleifen verpackt, um einen Byte Wert in Kilobyte, Megabyte oder Gigabyte umzurechnen.
Das dies aber auch viel einfacher geht zeigt die gleich folgende Funktion. Es sei noch anzumerken, dass es sehr kurze Funktionen gibt, mit denen man einen entsprechenden Byte Wert automatisch in das passende kB, MB, GB Format konvertieren kann. Das ist aber manchmal nicht gewünscht, da es einem die Flexibilität raubt. Gemeint ist damit, dass diese Funktionen z.B. den Byte Wert von 102016 nimmt und automatisch den kB Wert von 99.63 zurück liefert. Jetzt könnte es aber sein, dass man den MB Wert 0.097 benötigt, aber MB erst ab 1.0 geliefert wird.
Mit folgender Funktion hat man jegliche Freiheit das Ausgabeformat selbst zu bestimmen und ggfs. noch mit anderen Funktionen zu kombinieren.

Die Funktion zum konvertieren von Byte Werte:

function convertFileSize( $size, $type = 'byte', $decimal = 2 )
{
    $size = intval( $size );
    switch ($type)
    {
        case 'kb':
            return round( ($size / pow( 1024, 1 )), $decimal );
        break;
 
        case 'mb':
            return round( ($size / pow( 1024, 2 )), $decimal );
        break;
 
        case 'gb':
            return round( ($size / pow( 1024, 3 )), $decimal );
        break;
 
        default:
            return $size;
        break;
    }
}

Anwendungsbeispiele:

// Dateigröße
$size = 30283277;
// Gibt aus: 29573.51 kB
echo convertFileSize( $size, 'kb', 2 ) . " kB";
// Gibt aus: 28.88 MB
echo convertFileSize( $size, 'mb', 3 ) . " MB";
// Gibt aus: 0.028 GB
echo convertFileSize( $size, 'gb', 3 ) . " GB";

Die Funktion erwartet 3 Parameter, wovon 2 optional sind. Übergeben werden muss die Größe in Byte. Der 2. Parameter bestimmt das Ausgabeformat "kb" für Kilobyte, "mb" für Megabyte, "gb" für Gigabyte. Bei anderen Angaben wird die Größe in Byte zurückgegeben. (Standard). Der 3. Parameter bestimmt die Nachkommastellen, Standard sind 2 Stellen.

Wie wir hier am kB Wert sehen, lässt sich der ein wenig schwer lesen. Um diesen Wert in ein gängiges Deutsches Format umzuwandeln, mit Tausendertrennzeichen und die Dezimalstelle als Komma statt Punkt, benutzt man die PHP Funktion number_format.

// Gibt aus: 29.573,51 kB
echo number_format( convertFileSize( $size, 'kb', 2 ), 2, ',', '.' ) . " kB";

Ich hoffe, die Funktion ist dem ein oder anderen mal nützlich. :-)


Bis zum nächsten Mal,
phpBuddy a.k.a. Andreas

Beispiel herunterladen (1 kB)