Start · Sprachen · PHP · Referenz · gzgetc

gzgetc

Funktion

Liest ein einzelnes Zeichen aus einer geöffneten gz-komprimierten Datei und gibt es zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

gzgetc(resource $stream): string|false

Beschreibung

gzgetc() liest genau ein Zeichen vom aktuellen Dateiposition-Zeiger einer mit gzopen() geöffneten gz-komprimierten Datei. Die Funktion ist das gz-Äquivalent zur Standard-PHP-Funktion fgetc(), arbeitet jedoch transparent mit GZIP-komprimierten Dateien.

Nach jedem Aufruf wird der interne Datei-Zeiger um eine Stelle vorgerückt. Am Dateiende gibt die Funktion false zurück. Typischerweise wird gzgetc() in einer Schleife verwendet, wenn zeichenweise Verarbeitung einer komprimierten Datei erforderlich ist — etwa bei der Analyse von Binärdaten oder beim Parsen von Protokolldateien.

Für das zeilenweise Lesen ist gzgets() effizienter, während gzread() beliebig viele Bytes in einem Aufruf lesen kann. gzgetc() eignet sich vor allem dann, wenn einzelne Zeichen eine semantische Bedeutung haben und separat ausgewertet werden müssen.

Parameter

Name Typ Default Beschreibung
$stream Pflicht resource Ein gültiges gz-Datei-Handle, das zuvor mit gzopen() im Lese-Modus geöffnet wurde.

Rückgabewert

Typ
string|false
Beschreibung
Gibt das gelesene Zeichen als string der Länge 1 zurück, oder false am Dateiende oder bei einem Fehler.

Beispiele

Zeichenweises Lesen einer gz-Datei

<?php
// Beispiel-GZ-Datei erzeugen
$gz = gzopen('/tmp/beispiel.gz', 'w');
gzwrite($gz, 'Hallo Welt!');
gzclose($gz);

// Zeichenweise lesen
$gz = gzopen('/tmp/beispiel.gz', 'r');
if ($gz === false) {
    die('Datei konnte nicht geöffnet werden.');
}

$inhalt = '';
while (($zeichen = gzgetc($gz)) !== false) {
    $inhalt .= $zeichen;
}
gzclose($gz);

echo $inhalt;
Hallo Welt!

Zeichen zählen in einer komprimierten Datei

<?php
// GZ-Datei mit Inhalt anlegen
$gz = gzopen('/tmp/zaehl.gz', 'w');
gzwrite($gz, "Lorem ipsum dolor sit amet");
gzclose($gz);

// Alle Zeichen zählen
$gz = gzopen('/tmp/zaehl.gz', 'r');
$anzahl = 0;
while (gzgetc($gz) !== false) {
    $anzahl++;
}
gzclose($gz);

echo "Anzahl Zeichen: " . $anzahl;
Anzahl Zeichen: 26

// Wichtig · Fallstricke

Performance: Da gzgetc() für jedes einzelne Zeichen aufgerufen wird, ist es bei großen Dateien deutlich langsamer als gzread() oder gzgets(). Für blockweises Lesen sollte stattdessen gzread() bevorzugt werden.

Fehlerbehandlung: Der Rückgabewert false tritt sowohl am regulären Dateiende als auch bei Lesefehlern auf. Mit gzeof() lässt sich prüfen, ob das Dateiende tatsächlich erreicht wurde.