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