Signatur
Beschreibung
gzrewind() setzt den internen Lesezeiger einer mit gzopen() geöffneten komprimierten Datei auf den Anfang zurück. Dies entspricht dem Aufruf von gzseek($stream, 0) bzw. dem nicht-komprimierten Äquivalent rewind().
Die Funktion ist nützlich, wenn eine gz-Datei mehrfach sequenziell gelesen werden soll, ohne sie schließen und erneut öffnen zu müssen. Typische Einsatzgebiete sind das zweimalige Durchlaufen einer komprimierten Datei – etwa beim ersten Durchlauf zum Zählen von Zeilen und beim zweiten Durchlauf zur eigentlichen Verarbeitung.
Zu beachten ist, dass gzrewind() nur für Dateien funktioniert, die im Lesemodus ('r') geöffnet wurden. Bei Schreibmodus-Streams ist ein Zurückspulen nicht möglich. Der Aufruf setzt außerdem das EOF-Flag des Streams zurück, sodass nachfolgende gzeof()-Prüfungen wieder korrekte Ergebnisse liefern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stream Pflicht | resource | Ein gültiger gz-Dateistream, der zuvor mit gzopen() geöffnet wurde. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn der Stream ungültig ist oder der Vorgang fehlschlägt).Beispiele
Datei zweimal lesen mit gzrewind
<?php
$file = gzopen('daten.gz', 'r');
if ($file === false) {
die('Datei konnte nicht geöffnet werden.');
}
// Erster Durchlauf: Zeilen zählen
$lines = 0;
while (!gzeof($file)) {
gzgets($file);
$lines++;
}
echo "Anzahl Zeilen: $lines\n";
// Zeiger zurücksetzen
gzrewind($file);
// Zweiter Durchlauf: Inhalte verarbeiten
while (!gzeof($file)) {
$zeile = gzgets($file);
echo $zeile;
}
gzclose($file);
Verwendung nach gzseek zum vollständigen Reset
<?php
$file = gzopen('beispiel.gz', 'r');
if ($file) {
// Zum 100. Byte springen
gzseek($file, 100);
echo 'Position nach gzseek: ' . gztell($file) . "\n";
// Zurück zum Anfang
if (gzrewind($file)) {
echo 'Position nach gzrewind: ' . gztell($file) . "\n";
}
gzclose($file);
}
// Wichtig · Fallstricke
Hinweis: gzrewind() funktioniert ausschließlich mit Streams, die im Lesemodus geöffnet wurden. Bei einem im Schreibmodus ('w', 'a') geöffneten Stream schlägt die Funktion fehl und gibt false zurück.
Da gz-komprimierte Dateien keine echte wahlfreie Positionierung (Random Access) unterstützen, kann gzseek() für vorwärtsgerichtete Suchen schneller sein als das vollständige Zurückspulen und erneute Lesen bis zur gewünschten Position. gzrewind() hingegen ist der einzig sichere Weg, um wirklich von vorne zu beginnen.