Start · Sprachen · PHP · Referenz · gzrewind

gzrewind

Funktion

Setzt den Dateizeiger eines geöffneten gz-Dateistroms auf den Anfang der Datei zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

gzrewind(resource $stream): bool

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

Typ
bool
Beschreibung
Gibt 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);
Anzahl Zeilen: 3 Zeile 1 Zeile 2 Zeile 3

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);
}
Position nach gzseek: 100 Position nach gzrewind: 0

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