Signatur
Beschreibung
inflate_init() erstellt einen Kontext-Handle für die inkrementelle (schrittweise) Dekomprimierung von Daten. Im Gegensatz zu gzuncompress() oder gzdecode(), die den gesamten komprimierten Datenstrom auf einmal benötigen, erlaubt der Inflate-Kontext die Verarbeitung von Daten in beliebig großen Blöcken – ideal für Streams, Dateiuploads oder Netzwerkdaten.
Das Encoding bestimmt das erwartete Kompressionsformat: ZLIB_ENCODING_RAW für rohe Deflate-Daten, ZLIB_ENCODING_DEFLATE für das Zlib-Format (mit Header) und ZLIB_ENCODING_GZIP für das gzip-Format. Es muss zum Format der komprimierten Eingabe passen, sonst schlägt die Dekomprimierung fehl.
Über den $options-Parameter lassen sich zusätzliche Einstellungen wie level, memory, window, strategy und dictionary konfigurieren. In den meisten Anwendungsfällen genügt der Standardwert.
Der zurückgegebene InflateContext wird anschließend an inflate_add() übergeben, um Datenchunks zu dekomprimieren, und mit inflate_get_status() oder inflate_get_read_len() überwacht werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $encoding Pflicht | int | Das Kompressionsformat der Eingabedaten. Erlaubte Werte: ZLIB_ENCODING_RAW, ZLIB_ENCODING_DEFLATE oder ZLIB_ENCODING_GZIP. |
|
| $options | array | [] | Optionales assoziatives Array mit Konfigurationsoptionen. Unterstützte Schlüssel: level (Kompressionsstufe, beim Inflate meist ignoriert), memory, window, strategy und dictionary (Vordefiniertes Wörterbuch als String). |
Rückgabewert
InflateContext-Objekt zurück, das als Handle für nachfolgende inflate_add()-Aufrufe verwendet wird. Im Fehlerfall (z. B. ungültiges Encoding) wird false zurückgegeben.Beispiele
Gzip-komprimierte Daten schrittweise dekomprimieren
<?php
// Beispiel-Daten: gzip-komprimierter String
$compressed = gzencode('Hallo, das ist ein Testtext für inflate_init!');
// Inflate-Kontext für gzip-Format initialisieren
$context = inflate_init(ZLIB_ENCODING_GZIP);
if ($context === false) {
die('Kontext konnte nicht initialisiert werden.');
}
// Daten in einem Block dekomprimieren (simulierter Stream)
$output = inflate_add($context, $compressed, ZLIB_FINISH);
echo $output;
Chunked Dekomprimierung eines Datenstroms
<?php
// Komprimierten Datenstrom erzeugen
$original = str_repeat('PHP ist großartig! ', 500);
$compressed = gzdeflate($original); // ZLIB_ENCODING_RAW
// Inflate-Kontext für RAW-Deflate initialisieren
$context = inflate_init(ZLIB_ENCODING_RAW);
if ($context === false) {
die('Fehler beim Initialisieren.');
}
$decompressed = '';
$chunkSize = 256;
$offset = 0;
$length = strlen($compressed);
// Daten in Blöcken verarbeiten
while ($offset < $length) {
$chunk = substr($compressed, $offset, $chunkSize);
$offset += $chunkSize;
$isLast = ($offset >= $length);
$flag = $isLast ? ZLIB_FINISH : ZLIB_SYNC_FLUSH;
$decompressed .= inflate_add($context, $chunk, $flag);
}
echo ($decompressed === $original) ? 'Dekomprimierung erfolgreich!' : 'Fehler!';
// Wichtig · Fallstricke
Encoding-Kompatibilität: Das gewählte Encoding muss exakt zum Format der komprimierten Daten passen. Ein falsches Encoding führt zu Fehlern in inflate_add(). gzencode() erzeugt GZIP-Format (ZLIB_ENCODING_GZIP), gzcompress() das Zlib-Format (ZLIB_ENCODING_DEFLATE) und gzdeflate() RAW-Deflate (ZLIB_ENCODING_RAW).
Ressourcenverwaltung: Ab PHP 8.0 ist der Rückgabetyp InflateContext (ein Objekt), in PHP 7.x war es eine Ressource. Der Kontext wird vom Garbage Collector freigegeben, sobald keine Referenz mehr darauf besteht.
Fehlerbehandlung: Prüfe den Rückgabewert von inflate_init() auf false, bevor du den Kontext verwendest. Fehler in inflate_add() können auf korrupte Daten oder ein falsches Encoding hinweisen.