Start · Sprachen · PHP · Referenz · inflate_get_read_len

inflate_get_read_len

Funktion

Gibt die Anzahl der bisher vom <code>InflateContext</code> gelesenen (verarbeiteten) Bytes zurück.

seit PHP 8.0.0 Kategorie: io

Signatur

inflate_get_read_len(InflateContext $context): int

Beschreibung

inflate_get_read_len() liefert die Gesamtanzahl der Bytes, die der angegebene Dekomprimierungs-Kontext bisher aus dem komprimierten Datenstrom gelesen hat. Diese Zahl entspricht den verarbeiteten Eingabe-Bytes (also den komprimierten Daten), nicht den dekomprimierten Ausgabe-Bytes.

Die Funktion ist nützlich, wenn man den Fortschritt einer laufenden Dekomprimierung überwachen oder prüfen möchte, wie viel komprimierter Daten bereits konsumiert wurde – beispielsweise beim stückweisen Verarbeiten (Streaming) großer Dateien oder Netzwerk-Datenströme.

Der Kontext wird zuvor mit inflate_init() erzeugt und kann für mehrere aufeinanderfolgende Aufrufe von inflate_add() wiederverwendet werden. inflate_get_read_len() lässt sich jederzeit zwischen oder nach diesen Aufrufen verwenden, um den aktuellen Stand abzufragen.

Parameter

Name Typ Default Beschreibung
$context Pflicht InflateContext Ein aktiver Dekomprimierungs-Kontext, der zuvor mit inflate_init() erstellt wurde.

Rückgabewert

Typ
int
Beschreibung
Die Anzahl der bisher vom Kontext verarbeiteten (gelesenen) komprimierten Eingabe-Bytes als nicht-negativer Ganzzahlwert.

Beispiele

Fortschritt einer Dekomprimierung überwachen

<?php
// Komprimierte Daten erzeugen (ZLIB-Format)
$original = str_repeat('Hallo Welt! ', 1000);
$compressed = zlib_encode($original, ZLIB_ENCODING_DEFLATE);

// Dekomprimierungs-Kontext initialisieren
$context = inflate_init(ZLIB_ENCODING_DEFLATE);

$chunkSize = 64;
$offset = 0;
$decompressed = '';

while ($offset < strlen($compressed)) {
    $chunk = substr($compressed, $offset, $chunkSize);
    $decompressed .= inflate_add($context, $chunk, ZLIB_NO_FLUSH);
    $offset += strlen($chunk);

    $readLen = inflate_get_read_len($context);
    echo "Verarbeitete Bytes: {$readLen} von " . strlen($compressed) . PHP_EOL;
}

// Abschließen
$decompressed .= inflate_add($context, '', ZLIB_FINISH);

echo "Fertig. Original-Länge: " . strlen($decompressed) . " Bytes" . PHP_EOL;
Verarbeitete Bytes: 64 von 150 Verarbeitete Bytes: 128 von 150 Verarbeitete Bytes: 150 von 150 Fertig. Original-Länge: 12000 Bytes

Gelesene Bytes nach vollständiger Dekomprimierung prüfen

<?php
$data = 'PHP ist großartig!';
$compressed = zlib_encode($data, ZLIB_ENCODING_GZIP);

$context = inflate_init(ZLIB_ENCODING_GZIP);
$result = inflate_add($context, $compressed, ZLIB_FINISH);

$readLen = inflate_get_read_len($context);

echo "Dekomprimiert: {$result}" . PHP_EOL;
echo "Komprimierte Eingabe-Bytes gelesen: {$readLen}" . PHP_EOL;
echo "Tatsächliche komprimierte Länge: " . strlen($compressed) . PHP_EOL;
Dekomprimiert: PHP ist großartig! Komprimierte Eingabe-Bytes gelesen: 38 Tatsächliche komprimierte Länge: 38

// Wichtig · Fallstricke

Der Rückgabewert bezieht sich ausschließlich auf die Eingabe-Bytes (komprimierte Daten). Die Anzahl der dekomprimierten Ausgabe-Bytes kann mit inflate_get_status() nicht direkt ermittelt werden – dafür muss die Länge der gesammelten Ausgabestrings selbst gezählt werden.

Wird ein ungültiger oder bereits freigegebener Kontext übergeben, löst PHP einen TypeError aus. Stelle sicher, dass der Kontext mit inflate_init() korrekt initialisiert wurde.