Wie kann man in PHP die Dateigröße umrechnen und in einer bestimmten Maßeinheit ausgeben lassen?
Da diese Frage des öfteren in Foren gestellt wird habe ich mal ein kleines Script geschrieben.
Datenmengen umrechnen – Bits und Bytes
Es handelt sich um eine Funktion (convertDataUnit) die als Argumente die Datenmenge ($size), die vorhandene Maßeinheit als Kürzel ($sourceUnit) und die gewünschte Maßeinheit als Kürzel ($targetUnit) verlangt.
Die beiden letzten Argumente sind optional. Als vorhandene Maßeinheit wird Byte (‚B‘) und als gewünschte Maßeinheit wird Yottabyte (‚YB‘) als Defaultwert verwendet.
Wie man KB in MB umrechnen oder MB in GB umrechnen muss, sollte jedem klar sein. Der Faktor ist hier 1024 (210) und nicht 1000 (103), da es sich um ein binäres System handelt.
Weiterführende Informationen zur Datenmenge oder über die Maßeinheit Byte bekommst Du im Internet.
Ausgegeben wird die Datenmenge mit 2 Nachkommastellen und der jeweiligen Maßeinheit. Die Vorkommastellen sind immer größer Null, aber immer kleiner als 1024 (nur beim hochrechnen).
Verwendet werden können die binären Maßeinheiten Bit (bit), Byte (B), Kilobyte (KB), Megabyte (MB), Gigabyte (GB), Terrabyte (TB), Petabyte (PB), Exabyte (EB), Zettabyte (ZB) und Yottabyte (YB).
Natürlich kann man mit dem Script nicht nur die Dateigröße umrechnen.
Man kann es auch für die Berechnung der Speicherkapazitäten von Laufwerken, Arbeitsspeicher, usw. oder von Übertragungsraten in der Informationstechnik verwenden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<?php function convertDataUnit( $size, $sourceUnit = 'B', $targetUnit = 'YB' ) { $units = array( 'bit' => 0, 'B' => 1, 'KB' => 2, 'MB' => 3, 'GB' => 4, 'TB' => 5, 'PB' => 6, 'EB' => 7, 'ZB' => 8, 'YB' => 9 ); if( $units[$sourceUnit] <= $units[$targetUnit] ) { for( $i = $units[$sourceUnit]; $size >= 1024; $i++ ) { if( $i === 0 ) { $size /= 8; } else { $size /= 1024; } } } else { for( $i = $units[$sourceUnit]; $i > $units[$targetUnit]; $i-- ) { if( $i === 1 ) { $size *= 8; } else { $size *= 1024; } } } return round( $size, 2 ) . ' ' . array_keys($units)[$i]; } echo convertDataUnit( 1234567890 ); // 1.15 GB echo convertDataUnit( 1.149780945852399, 'GB', 'B' ); // 1234567890 B ?> |
Du kannst das ganze natürlich noch erweitern oder verbessern, aber ich denke die Funktion ist jetzt bereits am Limit und sollte nicht mit weiteren Argumenten überladen werden.
Wer einen Fehler findet, einen besseren Weg kennt oder einfach nur ein Statement abgeben will kann gern einen Kommentar hinterlassen.
Inzwischen habe ich das Script „übersetzt“ und im Beitrag Datenmengen umrechnen in JavaScript zur Verfügung gestellt.