Signatur
Beschreibung
gzfile() öffnet eine gzip-komprimierte Datei, dekomprimiert sie und gibt jede Zeile des Inhalts als einzelnes Element eines Arrays zurück – inklusive der jeweiligen Zeilenumbrüche. Die Funktion ist das gzip-Äquivalent zur Standard-Funktion file() und eignet sich ideal, wenn komprimierte Textdateien (z. B. Log-Dateien oder CSV-Exporte) schnell und ohne manuelles Öffnen/Schließen eingelesen werden sollen.
Intern kombiniert die Funktion das Verhalten von gzopen(), gzread() und gzclose() in einem einzigen Aufruf. Der Dateiname kann eine lokale Datei oder – sofern allow_url_fopen aktiv ist – eine URL sein. Neben lokalen .gz-Dateien unterstützt PHP transparente Dateistream-Wrapper.
Wenn die gesamte Datei im Speicher gehalten werden kann und keine streaming-basierte Verarbeitung benötigt wird, ist gzfile() die bequemste Option. Für sehr große Dateien empfiehlt sich stattdessen gzopen() in Kombination mit gzgets(), um Zeile für Zeile zu verarbeiten, ohne den gesamten Inhalt auf einmal in den Speicher zu laden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur gzip-komprimierten Datei. Kann ein absoluter oder relativer Dateipfad sein. Unterstützt auch URLs, wenn allow_url_fopen in der php.ini aktiviert ist. |
|
| $use_include_path | int | 0 | Wird dieser Parameter auf 1 gesetzt, sucht PHP zusätzlich in den in include_path definierten Verzeichnissen nach der Datei. |
Rückgabewert
false zurückgegeben.Beispiele
Inhalt einer gz-Datei einlesen und ausgeben
<?php
// Liest eine gzip-komprimierte Textdatei ein
$lines = gzfile('/var/log/app.log.gz');
if ($lines === false) {
echo 'Fehler beim Lesen der Datei.';
} else {
foreach ($lines as $lineNumber => $line) {
echo ($lineNumber + 1) . ': ' . htmlspecialchars($line);
}
}
?>
Komprimierte CSV-Datei verarbeiten
<?php
// CSV-Daten aus einer gz-Datei lesen und parsen
$lines = gzfile('data/export.csv.gz');
if ($lines === false) {
throw new RuntimeException('Datei konnte nicht gelesen werden.');
}
$header = null;
$records = [];
foreach ($lines as $line) {
$fields = str_getcsv(trim($line));
if ($header === null) {
$header = $fields;
} else {
$records[] = array_combine($header, $fields);
}
}
var_dump(count($records) . ' Datensätze eingelesen.');
?>
// Wichtig · Fallstricke
Speicherverbrauch: Da gzfile() den gesamten Dateiinhalt dekomprimiert und als Array im Speicher hält, kann es bei großen Dateien zu hohem Speicherverbrauch kommen. gzip-Dateien können nach der Dekompression um ein Vielfaches ihrer komprimierten Größe anwachsen. Für große Dateien sollte stattdessen gzopen() mit zeilenweisem Lesen über gzgets() genutzt werden.
Fehlerbehandlung: Der Rückgabewert sollte stets mit === false geprüft werden, da ein leeres Array ebenfalls einen falsy-Wert darstellt, aber technisch erfolgreich ist.
Zeilenumbrüche: Die Zeilenumbrüche (\n bzw. \r\n) werden am Ende jeder Zeile mitgegeben, ähnlich wie bei file(). Mit trim() oder rtrim() können sie entfernt werden.