Signatur
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
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.';
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.