Signatur
Beschreibung
gzpassthru() liest ab der aktuellen Position des gz-Dateizeigers alle noch nicht gelesenen Daten und schreibt sie unkomprimiert direkt in den Ausgabepuffer (Standard-Output). Die Funktion arbeitet dabei ähnlich wie passthru() oder fpassthru(), jedoch speziell für mit gzopen() geöffnete gz-komprimierte Dateien.
Die Funktion ist besonders nützlich, wenn eine gz-Datei transparent an den Browser oder ein anderes Ausgabeziel weitergeleitet werden soll, ohne den gesamten Inhalt zunächst in eine PHP-Variable einzulesen. Das spart Arbeitsspeicher, da die Daten gestreamt werden.
Wurde der Dateizeiger bereits teilweise vorwärts bewegt (z. B. durch vorherige gzread()- oder gzgets()-Aufrufe), gibt gzpassthru() nur die verbleibenden, noch nicht gelesenen Daten aus. Sollen alle Daten ausgegeben werden, muss der Zeiger zuvor mit gzrewind() an den Anfang gesetzt werden.
Nach dem Aufruf ist die Datei vollständig gelesen und sollte mit gzclose() geschlossen werden, um Ressourcen freizugeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stream Pflicht | resource | Ein gültiger gz-Dateizeiger, wie er von gzopen() zurückgegeben wird. |
Rückgabewert
false im Fehlerfall.Beispiele
Gesamten Inhalt einer gz-Datei ausgeben
<?php
// gz-Datei öffnen
$gz = gzopen('/var/data/report.txt.gz', 'rb');
if ($gz === false) {
die('Datei konnte nicht geöffnet werden.');
}
// Passenden Content-Type setzen (Inhalt wird unkomprimiert gesendet)
header('Content-Type: text/plain; charset=utf-8');
// Alle unkomprimierten Daten direkt ausgeben
$bytes = gzpassthru($gz);
echo "\n\n/* $bytes Bytes ausgegeben */";
gzclose($gz);
Nur verbleibende Daten nach partiellem Lesen ausgeben
<?php
$gz = gzopen('/var/data/log.gz', 'rb');
if ($gz === false) {
die('Datei nicht gefunden.');
}
// Erste Zeile separat lesen und verarbeiten
$firstLine = gzgets($gz);
echo 'Erste Zeile: ' . htmlspecialchars($firstLine) . PHP_EOL;
echo '--- Rest der Datei ---' . PHP_EOL;
// Alle verbleibenden Zeilen direkt ausgeben
$bytes = gzpassthru($gz);
echo PHP_EOL . "/* Noch $bytes Bytes ausgegeben */";
gzclose($gz);
// Wichtig · Fallstricke
Ressourcenfreigabe: gzpassthru() schließt den Dateizeiger nicht automatisch. gzclose() sollte nach dem Aufruf explizit aufgerufen werden.
Ausgabepufferung: Wenn ob_start() aktiv ist, landen die Daten im Ausgabepuffer statt direkt im Browser. Bei großen Dateien kann das zu hohem Speicherverbrauch führen. Ggf. ob_end_flush() vorher aufrufen.
Binärdateien: Unter Windows sollte die Datei im Binärmodus ('rb') geöffnet werden, um Zeilenumbruch-Konvertierungen zu vermeiden.