Signatur
Beschreibung
inflate_get_status() liefert den internen Zustandscode des zlib-Dekomprimierungsstroms. Damit lässt sich prüfen, ob die inkrementelle Dekomprimierung noch läuft, bereits abgeschlossen ist oder ein Fehler aufgetreten ist.
Die Funktion ist besonders nützlich, wenn große Datenmengen blockweise mit inflate_add() verarbeitet werden und nach jedem Block geprüft werden soll, ob der Datenstrom vollständig und fehlerfrei dekomprimiert wurde.
Der Rückgabewert entspricht einer der zlib-Statuskonstanten (ZLIB_OK, ZLIB_STREAM_END, ZLIB_NEED_DICT, ZLIB_ERRNO, ZLIB_STREAM_ERROR, ZLIB_DATA_ERROR, ZLIB_MEM_ERROR, ZLIB_BUF_ERROR oder ZLIB_VERSION_ERROR).
Typischerweise signalisiert ZLIB_STREAM_END, dass alle komprimierten Daten erfolgreich dekomprimiert wurden, während ZLIB_OK bedeutet, dass der Vorgang noch nicht abgeschlossen ist und weitere Daten erwartet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $context Pflicht | DeflateContext | Ein aktiver Dekomprimierungskontext, der zuvor mit inflate_init() erstellt wurde. |
Rückgabewert
int zurück, z. B. ZLIB_OK (0) für laufende Dekomprimierung oder ZLIB_STREAM_END (1) bei vollständiger Dekomprimierung. Negative Werte zeigen Fehler an.Beispiele
Status nach inkrementeller Dekomprimierung prüfen
<?php
// Beispieldaten komprimieren
$original = 'Hallo Welt! Dies ist ein Teststring.';
$compressed = zlib_encode($original, ZLIB_ENCODING_DEFLATE);
// Dekomprimierungskontext erstellen
$context = inflate_init(ZLIB_ENCODING_DEFLATE);
// Daten blockweise hinzufügen
$output = inflate_add($context, $compressed, ZLIB_FINISH);
// Status prüfen
$status = inflate_get_status($context);
if ($status === ZLIB_STREAM_END) {
echo "Dekomprimierung erfolgreich abgeschlossen.\n";
echo "Ergebnis: " . $output . "\n";
} elseif ($status === ZLIB_OK) {
echo "Dekomprimierung noch nicht abgeschlossen.\n";
} else {
echo "Fehler beim Dekomprimieren. Statuscode: " . $status . "\n";
}
Blockweise Verarbeitung eines Datenstroms
<?php
$original = str_repeat('PHP ist toll! ', 500);
$compressed = zlib_encode($original, ZLIB_ENCODING_GZIP);
$context = inflate_init(ZLIB_ENCODING_GZIP);
$chunkSize = 256;
$offset = 0;
$result = '';
while ($offset < strlen($compressed)) {
$chunk = substr($compressed, $offset, $chunkSize);
$offset += $chunkSize;
$isLast = ($offset >= strlen($compressed));
$result .= inflate_add($context, $chunk, $isLast ? ZLIB_FINISH : ZLIB_SYNC_FLUSH);
$status = inflate_get_status($context);
if ($status === ZLIB_STREAM_END) {
echo "Stream vollständig dekomprimiert nach " . $offset . " Bytes.\n";
break;
} elseif ($status < 0) {
echo "Fehler: Statuscode " . $status . "\n";
break;
}
}
echo "Dekomprimierte Länge: " . strlen($result) . " Bytes\n";
echo "Übereinstimmung: " . ($result === $original ? 'Ja' : 'Nein') . "\n";
// Wichtig · Fallstricke
Achtung: Nicht alle zlib-Statuskonstanten sind in jeder PHP-Version verfügbar. Prüfe gegebenenfalls, ob eine Konstante mit defined() existiert, bevor du sie verwendest.
Ein Statuscode von ZLIB_DATA_ERROR (-3) weist auf beschädigte oder ungültige komprimierte Daten hin. In diesem Fall sollte der Kontext verworfen und eine Fehlerbehandlung eingeleitet werden.
Der Kontext sollte nach der Verwendung durch Zuweisung von null oder durch Verlassen des Gültigkeitsbereichs freigegeben werden, da PHP den Speicher sonst erst beim nächsten GC-Durchlauf zurückgewinnt.