Start · Sprachen · PHP · Referenz · ini_parse_quantity

ini_parse_quantity

Funktion

Wandelt eine INI-Kurzschreibweise (z. B. <code>128M</code>) in die entsprechende Byte-Anzahl als Integer um.

seit PHP 8.2.0 Kategorie: misc

Signatur

ini_parse_quantity(string $shorthand): int

Beschreibung

ini_parse_quantity() interpretiert Größenangaben in der PHP-INI-Kurzschreibweise und gibt den entsprechenden Wert in Bytes zurück. Diese Schreibweise kennt man aus Direktiven wie memory_limit, post_max_size oder upload_max_filesize in der php.ini.

Unterstützte Suffixe sind K oder k (Kilobytes, × 1.024), M oder m (Megabytes, × 1.048.576) sowie G oder g (Gigabytes, × 1.073.741.824). Ohne Suffix wird der Wert direkt als Bytes interpretiert.

Die Funktion ist besonders nützlich, wenn man in eigenem Code INI-Werte liest (z. B. via ini_get()) und sie für Vergleiche oder Berechnungen in eine reine Byte-Zahl umrechnen muss – zum Beispiel um zu prüfen, ob eine hochzuladende Datei das Server-Limit überschreitet.

Ungültige Suffixe oder nicht numerische Eingaben lösen einen E_WARNING aus und die Funktion gibt 0 zurück.

Parameter

Name Typ Default Beschreibung
$shorthand Pflicht string Eine Größenangabe in INI-Kurzschreibweise, z. B. "128M", "2G" oder "512K". Groß-/Kleinschreibung des Suffixes wird ignoriert.

Rückgabewert

Typ
int
Beschreibung
Die berechnete Größe in Bytes als Integer. Bei ungültiger Eingabe wird 0 zurückgegeben und ein E_WARNING erzeugt.

Beispiele

Einfache Umrechnung verschiedener Kurzschreibweisen

<?php
var_dump(ini_parse_quantity('128M'));  // 134217728
var_dump(ini_parse_quantity('1G'));    // 1073741824
var_dump(ini_parse_quantity('512K'));  // 524288
var_dump(ini_parse_quantity('1024')); // 1024 (keine Einheit = Bytes)
var_dump(ini_parse_quantity('2g'));    // 2147483648 (Kleinbuchstabe erlaubt)
int(134217728) int(1073741824) int(524288) int(1024) int(2147483648)

Upload-Limit gegen Server-Konfiguration prüfen

<?php
// Maximale Upload-Größe aus der php.ini auslesen und in Bytes umrechnen
$maxUpload  = ini_parse_quantity(ini_get('upload_max_filesize'));
$maxPost    = ini_parse_quantity(ini_get('post_max_size'));
$effectiveLimit = min($maxUpload, $maxPost);

echo 'Effektives Upload-Limit: ' . number_format($effectiveLimit / 1048576, 1) . ' MiB' . PHP_EOL;

// Prüfen ob eine konkrete Dateigröße erlaubt wäre
$fileSize = 50 * 1024 * 1024; // 50 MiB
if ($fileSize > $effectiveLimit) {
    echo 'Datei überschreitet das Server-Limit!';
} else {
    echo 'Datei liegt innerhalb des Limits.';
}
Effektives Upload-Limit: 128.0 MiB Datei liegt innerhalb des Limits.

// Wichtig · Fallstricke

Verhalten bei ungültigen Werten: Wird ein unbekannter Suffix übergeben (z. B. "10T"), gibt die Funktion 0 zurück und erzeugt einen E_WARNING. Eigene Eingaben sollten daher vor der Übergabe validiert werden.

Plattformabhängige Limits: Auf 32-Bit-Systemen kann ein Wert wie "3G" zu einem Integer-Überlauf führen. PHP selbst wird unter diesen Umständen ebenfalls gewarnt – auf modernen 64-Bit-Systemen ist dies kein Problem.

Verfügbarkeit: Die Funktion wurde in PHP 8.2.0 eingeführt. Für ältere PHP-Versionen muss die Umrechnung manuell implementiert werden.