Start · Sprachen · PHP · Referenz · gzopen

gzopen

Funktion

Öffnet eine gz-komprimierte Datei oder einen URL und gibt einen Datei-Zeiger zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

gzopen(string $filename, string $mode, int $use_include_path = 0): GdImage|false

Beschreibung

gzopen() öffnet eine gzip-komprimierte Datei zum Lesen oder Schreiben und gibt einen Datei-Zeiger zurück, der mit den übrigen gz*-Funktionen verwendet werden kann. Die Funktion arbeitet ähnlich wie fopen(), verarbeitet jedoch transparent die gzip-Komprimierung: Beim Lesen wird die Datei automatisch dekomprimiert, beim Schreiben wird der Inhalt automatisch komprimiert.

Der mode-Parameter gibt an, ob die Datei zum Lesen (rb), Schreiben (wb) oder Anhängen (ab) geöffnet wird. Optional kann ein Komprimierungsgrad von 1 (schnell, wenig Komprimierung) bis 9 (langsam, maximale Komprimierung) angegeben werden, z. B. wb6. Zusätzlich kann der Modus f für gefilterte oder h für Huffman-only-Komprimierung angefügt werden.

gzopen() unterstützt auch transparentes Lesen von nicht-komprimierten Dateien, sofern der Modus rb verwendet wird – PHP erkennt dabei automatisch, ob die Datei tatsächlich komprimiert ist. Die Funktion eignet sich besonders für die Verarbeitung großer Dateien, da der Inhalt zeilenweise gelesen werden kann, ohne die gesamte Datei in den Speicher zu laden.

Nach der Verarbeitung sollte der Datei-Zeiger mit gzclose() geschlossen werden, um Ressourcen freizugeben.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur gz-Datei oder URL (sofern fopen-Wrapper aktiviert sind), die geöffnet werden soll.
$mode Pflicht string Öffnungsmodus: rb (lesen), wb (schreiben) oder ab (anhängen). Optional kann ein Komprimierungsgrad (1–9) angehängt werden, z. B. wb9. Muss immer als binär (b) angegeben werden.
$use_include_path int 0 Wenn auf 1 gesetzt, wird die Datei auch im include_path aus der php.ini gesucht.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg einen gz-Datei-Zeiger (Ressource) zurück, der mit gzread(), gzgets(), gzwrite() usw. verwendet werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Eine gz-Datei zeilenweise lesen

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

while (!gzeof($handle)) {
    $line = gzgets($handle, 4096);
    echo htmlspecialchars($line);
}

gzclose($handle);

Daten in eine gz-Datei schreiben

<?php
$handle = gzopen('/tmp/output.gz', 'wb9');
if ($handle === false) {
    die('Datei konnte nicht geöffnet werden.');
}

$data = "Zeile 1: Hallo Welt\nZeile 2: Komprimierter Inhalt\n";
gzwrite($handle, $data);

gzclose($handle);
echo 'Datei erfolgreich komprimiert gespeichert.';
Datei erfolgreich komprimiert gespeichert.

Automatische Erkennung komprimierter Dateien

<?php
// Funktioniert sowohl mit .gz-Dateien als auch mit unkomprimierten Textdateien
$filename = '/var/data/bericht.txt.gz';
$handle = gzopen($filename, 'rb');
if ($handle === false) {
    die('Fehler beim Öffnen der Datei: ' . $filename);
}

$inhalt = '';
while (!gzeof($handle)) {
    $inhalt .= gzread($handle, 8192);
}
gzclose($handle);

echo 'Gelesene Bytes: ' . strlen($inhalt);

// Wichtig · Fallstricke

Modus immer als binär angeben: Es wird empfohlen, den Modus immer mit b (z. B. rb oder wb) zu öffnen, um plattformübergreifende Probleme mit Zeilenenden unter Windows zu vermeiden.

Ressourcen freigeben: Ein geöffneter gz-Datei-Zeiger sollte stets mit gzclose() geschlossen werden, insbesondere in lang laufenden Skripten oder bei der Verarbeitung vieler Dateien.

Komprimierungsgrad: Ein höherer Komprimierungsgrad (z. B. wb9) erzeugt kleinere Dateien, benötigt aber deutlich mehr CPU-Zeit. Für die meisten Anwendungsfälle ist wb6 ein guter Kompromiss.

Rückgabetyp: Ab PHP 8.0 gibt die Funktion intern eine resource vom Typ zlib.deflate zurück. Der Rückgabewert ist kein GdImage-Objekt – die Signatur in der Originaldokumentation weist dies als resource aus.