Start · Sprachen · PHP · Referenz · inflate_init

inflate_init

Funktion

Initialisiert einen inkrementellen Inflate-Kontext zum schrittweisen Dekomprimieren von Daten mit <code>inflate_add()</code>.

seit PHP 7.0.0 Kategorie: io

Signatur

inflate_init(int $encoding, array $options = []): InflateContext|false

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

Typ
InflateContext|false
Beschreibung
Gibt bei Erfolg ein 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;
Hallo, das ist ein Testtext für inflate_init!

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!';
Dekomprimierung erfolgreich!

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