Start · Sprachen · PHP · Referenz · gzread

gzread

Funktion

Liest bis zu <code>length</code> unkomprimierte Bytes aus einer geöffneten gz-Datei und gibt diese als String zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

gzread(resource $stream, int $length): string|false

Beschreibung

gzread() liest bis zu length Bytes aus dem mit gzopen() geöffneten Stream. Die Daten werden dabei on-the-fly dekomprimiert, sodass der Rückgabewert stets die unkomprimierte Form enthält. Die Funktion ist binary-safe, d. h. sie eignet sich auch für Binärdaten wie Bilder oder Archive.

Die Funktion stoppt außerdem, sobald das Ende der Datei (EOF) erreicht ist, selbst wenn length größer als die verbleibenden Bytes ist. Um den gesamten Inhalt einer gz-Datei einzulesen, kann man daher in einer Schleife lesen oder gzfile() bzw. gzfile_get_contents() verwenden.

Im Gegensatz zu gzgets() hält gzread() nicht bei einem Zeilenumbruch an und ist daher für alle Datentypen geeignet, bei denen Newlines keine strukturelle Bedeutung haben. Bei sehr großen Dateien empfiehlt sich ein blockweises Lesen, um den Speicherverbrauch gering zu halten.

Parameter

Name Typ Default Beschreibung
$stream Pflicht resource Ein gültiger gz-Datei-Handle, wie er von gzopen() zurückgegeben wird.
$length Pflicht int Maximale Anzahl unkomprimierter Bytes, die gelesen werden sollen. Muss größer als 0 sein.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die gelesenen (unkomprimierten) Bytes als String zurück. Bei einem Fehler oder wenn der Datei-Handle ungültig ist, wird false zurückgegeben. Am Ende der Datei wird ein leerer String zurückgegeben.

Beispiele

Gesamten Inhalt einer .gz-Datei blockweise einlesen

<?php
$handle = gzopen('/var/data/logfile.gz', 'rb');
if ($handle === false) {
    die('Datei konnte nicht geöffnet werden.');
}

$content = '';
while (!gzeof($handle)) {
    $chunk = gzread($handle, 4096); // 4 KB pro Schleifendurchlauf
    if ($chunk === false) {
        break;
    }
    $content .= $chunk;
}

gzclose($handle);
echo $content;

Nur die ersten N Bytes einer komprimierten Datei lesen

<?php
$handle = gzopen('/var/data/archive.gz', 'rb');
if ($handle === false) {
    die('Datei konnte nicht geöffnet werden.');
}

// Lese nur die ersten 100 unkomprimierten Bytes
$header = gzread($handle, 100);
gzclose($handle);

if ($header !== false) {
    echo 'Erste 100 Bytes: ' . PHP_EOL;
    echo $header . PHP_EOL;
} else {
    echo 'Lesefehler aufgetreten.' . PHP_EOL;
}

// Wichtig · Fallstricke

Handle-Validierung: Stellen Sie sicher, dass gzopen() einen gültigen Handle zurückgegeben hat, bevor Sie gzread() aufrufen, da ein ungültiger Handle zu einem PHP-Fehler führt.

Binäre Dateien: Beim Öffnen binärer gz-Dateien sollte der Modus 'rb' verwendet werden, um plattformübergreifende Probleme mit Zeilenenden unter Windows zu vermeiden.

Speicher: Bei sehr großen komprimierten Dateien sollten Sie length auf einen sinnvollen Wert begrenzen (z. B. 8192 Bytes) und in einer Schleife lesen, anstatt die gesamte Datei auf einmal in den Speicher zu laden.