Start · Sprachen · PHP · Referenz · gztell

gztell

Funktion

Ermittelt die aktuelle Position (Byte-Offset) des Dateizeigers einer geöffneten gz-komprimierten Datei.

seit PHP 4.0.0 Kategorie: io

Signatur

gztell(resource $stream): int|false

Beschreibung

gztell() gibt die aktuelle Position des Dateizeigers der angegebenen gz-Datei-Ressource zurück. Die zurückgegebene Position bezieht sich auf die unkomprimierten Daten, nicht auf die tatsächliche Position innerhalb der komprimierten Datei auf dem Datenträger.

Die Funktion ist das gz-Äquivalent zu ftell() und wird typischerweise zusammen mit gzseek() und gzrewind() verwendet, um innerhalb einer gz-Datei zu navigieren. Sie ist sinnvoll, wenn man nach Lese- oder Schreiboperationen die aktuelle Leseposition kennen möchte, etwa um später dorthin zurückzuspringen oder Fortschrittsinformationen zu ermitteln.

Die Ressource muss zuvor mit gzopen() geöffnet worden sein. Im Fehlerfall – z. B. wenn eine ungültige Ressource übergeben wird – gibt die Funktion false zurück.

Parameter

Name Typ Default Beschreibung
$stream Pflicht resource Eine gültige gz-Datei-Ressource, die zuvor mit gzopen() geöffnet wurde.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die aktuelle Position des Dateizeigers als Integer zurück (Byte-Offset in den unkomprimierten Daten), oder false im Fehlerfall.

Beispiele

Aktuelle Zeigerposition nach dem Lesen ermitteln

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

// Ersten 100 Bytes lesen
$data = gzread($gz, 100);

// Aktuelle Position des Dateizeigers
$pos = gztell($gz);
echo "Aktuelle Position nach dem Lesen: " . $pos . " Bytes\n";

gzclose($gz);
Aktuelle Position nach dem Lesen: 100 Bytes

Position speichern und mit gzseek() wiederherstellen

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

// Einige Daten lesen
gzread($gz, 50);

// Aktuelle Position merken
$merkPos = gztell($gz);
echo "Gemerkte Position: " . $merkPos . "\n";

// Weitere Daten lesen
$abschnitt = gzread($gz, 200);
echo "Weiterer Abschnitt (erste 20 Zeichen): " . substr($abschnitt, 0, 20) . "\n";

// Zurück zur gemerkten Position
gzseek($gz, $merkPos);
echo "Position nach gzseek: " . gztell($gz) . "\n";

gzclose($gz);
Gemerkte Position: 50 Weiterer Abschnitt (erste 20 Zeichen): ... Position nach gzseek: 50

// Wichtig · Fallstricke

Hinweis: Die zurückgegebene Position bezieht sich auf die unkomprimierten Daten. Sie ist daher nicht mit der physischen Byteposition in der .gz-Datei auf dem Datenträger identisch.

gzseek() ist bei gz-Dateien im Vergleich zu normalen Dateien langsamer, da rückwärtiges Springen ein Neueinlesen der Datei vom Anfang erfordert. gztell() selbst ist jedoch eine schnelle Operation ohne nennenswerten Overhead.