Start · Sprachen · PHP · Referenz · inflate_get_status

inflate_get_status

Funktion

Gibt den aktuellen Status eines Dekomprimierungskontexts zurück, der mit <code>inflate_init()</code> erstellt wurde.

seit PHP 7.0.0 Kategorie: io

Signatur

inflate_get_status(DeflateContext $context): int

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

Typ
int
Beschreibung
Gibt eine zlib-Statuskonstante als 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";
}
Dekomprimierung erfolgreich abgeschlossen. Ergebnis: Hallo Welt! Dies ist ein Teststring.

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";
Stream vollständig dekomprimiert nach 512 Bytes. Dekomprimierte Länge: 7000 Bytes Übereinstimmung: Ja

// 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.