Szenario: Die Größe verschiedener Dateien wird als Byte in einer Datenbank gespeichert. Wie können diese Größeninformationen am besten in Kilobyte, Megabyte und Gigabyte formatiert werden? Zum Beispiel habe ich eine MP3, die Ubuntu als "5,2 MB (5445632 Bytes)" anzeigt. Wie würde ich dies auf einer Webseite als "5,2 MB" anzeigen UND Dateien mit weniger als einem Megabyte als KB und Dateien mit einem Gigabyte und mehr als GB anzeigen lassen?
184
Antworten:
(Aus php.net entnommen , gibt es dort viele andere Beispiele, aber dieses gefällt mir am besten :-)
quelle
$bytes /= (1 << (10 * $pow))
oder dergleichen verwendet haben, könnte ich es besser mögen. :-PKiB
,MiB
,GiB
undTiB
da Sie Division durch1024
. Wenn Sie durch1000
es geteilt würden, wäre ohne diei
.Uncomment one of the following alternatives
war etwas, das ich 5 Minuten lang nicht bemerkt habe ...Dies ist die sauberste Implementierung von Chris Jester-Young, die ich je gesehen habe, kombiniert mit der von php.net und einem präzisen Argument.
quelle
$suffixes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
Ich möchte eine Yottabyte-Festplatte! :-PformatBytes(259748192, 3)
kehrt zurück,259748192 MB
was nicht richtig istPseudocode:
quelle
Dies ist Kohanas Implementierung, Sie könnten sie verwenden:
quelle
$force_unit
und$si
scheinen das gleiche zu tun. Sie können auch eine beliebige Zeichenfolge mit einem "i" an übergeben$force_unit
, da diese auf Position getestet wird. Die Dezimalformatierung ist ebenfalls übertrieben.Teilen Sie es einfach durch 1024 für kb, 1024 ^ 2 für mb und 1024 ^ 3 für GB. So einfach ist das.
quelle
Nur meine Alternative, kurz und sauber:
oder dümmer und effizienter:
quelle
Verwenden Sie diese Funktion, wenn Sie einen Funktionscode wünschen
bcdiv ()
quelle
Ich weiß, dass es vielleicht etwas spät ist, diese Frage zu beantworten, aber mehr Daten werden niemanden umbringen. Hier ist eine sehr schnelle Funktion:
BEARBEITEN: Ich habe meinen Beitrag aktualisiert, um den von camomileCase vorgeschlagenen Fix aufzunehmen:
quelle
Einfache Funktion
quelle
Flexible Lösung:
quelle
Es gelang mir mit folgender Funktion:
quelle
Mein Ansatz
quelle
Ich weiß nicht, warum Sie es so kompliziert machen sollten wie die anderen.
Der folgende Code ist viel einfacher zu verstehen und etwa 25% schneller als die anderen Lösungen, die die Protokollfunktion verwenden (20 Mio.-mal als Funktion mit unterschiedlichen Parametern bezeichnet).
quelle
Ich habe dies getan, indem ich alle Eingaben in Bytes konvertiert und so in alle benötigten Ausgaben konvertiert habe. Außerdem habe ich eine Zusatzfunktion verwendet, um die Basis 1000 oder 1024 zu erhalten, aber es blieb flexibel, 1024 für den gängigen Typ zu verwenden (ohne 'i', wie MB anstelle von MiB).
quelle
Versuche dies ;)
quelle
quelle
Rufen Sie einfach die Funktion auf
quelle
Dies funktioniert mit dem letzten PHP
quelle
Obwohl etwas abgestanden, bietet diese Bibliothek eine getestete und robuste Konvertierungs-API:
https://github.com/gabrielelana/byte-units
Einmal installiert:
Und in die andere Richtung zu konvertieren:
Über die grundlegende Konvertierung hinaus bietet es Methoden zum Addieren, Subtrahieren, Vergleichen usw.
Ich bin in keiner Weise mit dieser Bibliothek verbunden.
quelle
quelle
Hier ist eine vereinfachte Implementierung der Funktion Drupal format_size :
quelle
Es ist etwas spät, aber eine etwas schnellere Version der akzeptierten Antwort finden Sie unten:
Es ist effizienter, da anstelle von zwei Log-E-Vorgängen nur ein Log-2-Vorgang ausgeführt wird.
Es ist jedoch tatsächlich schneller, die offensichtlichere Lösung unten zu finden:
Dies liegt daran, dass der Index gleichzeitig mit dem Wert der Anzahl der Bytes in der entsprechenden Einheit berechnet wird. Dies verkürzte die Ausführungszeit um etwa 35% (eine Geschwindigkeitssteigerung von 55%).
quelle
Eine weitere komprimierte Implementierung, die in die Basis 1024 (binär) oder die Basis 1000 (dezimal) übersetzt werden kann und daher auch mit unglaublich großen Zahlen funktioniert, daher die Verwendung der bc-Bibliothek:
quelle
bcpow()
Typeerror - Ausnahme , wenn werfen wird$base
und$i
keine String - Werte. Getestet auf PHP Version 7.0.11.Ich dachte, ich würde eine Vernetzung von zwei Übermittler-Codes hinzufügen (mit John Himmelmans Code, der sich in diesem Thread befindet, und mit Eugene Kuzmenkos Code), den ich verwende.
Dies verwendet Eugenes Code, um die
$value
in Bytes zu formatieren (ich behalte meine Daten in MB, also konvertiert es meine Daten:10485760 MB
in10995116277760
) - es verwendet dann Johns Code, um sie in den richtigen Anzeigewert (10995116277760
in10 TB
) zu konvertieren .Ich fand das sehr hilfreich - also meinen Dank an die beiden Einsender!
quelle
Extrem einfache Funktion zum Abrufen der Größe menschlicher Dateien.
Ursprüngliche Quelle: http://php.net/manual/de/function.filesize.php#106569
Code kopieren / einfügen:
quelle
Ich habe meine eigene Funktion entwickelt, die die vom Menschen lesbare Speichergröße in verschiedene Größen umwandelt.
Diese Funktion akzeptiert alle Abkürzungen für die Speichergröße wie "Megabyte, MB, MB, MB, MB, Kilobyte, K, KB, B, Terabyte, T ..." und ist daher Tippfehler.
quelle
Basierend auf Leos Antwort , füge hinzu
Wenn Sie die maximale Einheit auf Mega setzen möchten, wechseln Sie zu
$units = explode(' ', ' K M');
quelle