Signatur
Beschreibung
PHP ermöglicht es, Datenströme automatisch mit zlib zu komprimieren oder zu dekomprimieren, indem beim Erstellen eines Stream-Kontexts (stream_context_create()) spezifische Optionen im Array-Schlüssel zlib übergeben werden. Dies ist besonders nützlich, wenn komprimierte Dateien (z. B. .gz-Dateien) gelesen oder geschrieben werden sollen, ohne den Komprimierungsvorgang manuell steuern zu müssen.
Die Optionen gelten für alle Streamfunktionen wie fopen(), file_get_contents() oder file_put_contents(), sofern ein entsprechender Kontext übergeben wird. Der Komprimierungslevel reicht von 0 (keine Komprimierung) bis 9 (maximale Komprimierung).
Wichtige Optionen sind: level (Komprimierungsstufe), memory (Speicherlevel für die Komprimierung) und window (Fenstergröße des Algorithmus). Diese Optionen beeinflussen den Trade-off zwischen Komprimierungsrate, Speicherverbrauch und Geschwindigkeit.
- level: Komprimierungsstufe (−1 bis 9); −1 = zlib-Standard (entspricht ca. 6).
- memory: Speicherlevel (1–9); höhere Werte benötigen mehr RAM, sind aber schneller.
- window: Log2 der Fenstergröße (8–15); größere Fenster verbessern die Komprimierung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options Pflicht | array | Assoziatives Array mit dem Schlüssel zlib, das wiederum ein Array mit den Optionen level, memory und window enthält. Beispiel: ['zlib' => ['level' => 6, 'window' => 15, 'memory' => 9]]. |
Rückgabewert
fopen() oder file_get_contents() übergeben werden kann.Beispiele
Komprimierte Datei mit Zlib-Kontext schreiben
<?php
// Zlib-Kontext mit Komprimierungslevel 6 erstellen
$context = stream_context_create([
'zlib' => [
'level' => 6,
'window' => 15,
'memory' => 9,
]
]);
// Daten komprimiert in eine Datei schreiben
$inhalt = 'Dies ist ein Testtext, der komprimiert gespeichert wird.';
file_put_contents('compress.zlib://ausgabe.gz', $inhalt, 0, $context);
echo 'Datei erfolgreich komprimiert gespeichert.';
Komprimierte Datei mit Zlib-Kontext lesen
<?php
// Zlib-Kontext erstellen
$context = stream_context_create([
'zlib' => [
'level' => 6,
]
]);
// Komprimierte Datei lesen und automatisch dekomprimieren
$inhalt = file_get_contents('compress.zlib://ausgabe.gz', false, $context);
if ($inhalt !== false) {
echo 'Gelesener Inhalt: ' . $inhalt;
} else {
echo 'Fehler beim Lesen der Datei.';
}
// Wichtig · Fallstricke
Hinweis zur Verfügbarkeit: Zlib-Kontextoptionen sind nur verfügbar, wenn PHP mit zlib-Unterstützung kompiliert wurde (Erweiterung zlib muss geladen sein). Dies kann mit extension_loaded('zlib') geprüft werden.
Speicherverbrauch: Hohe Werte für memory und window steigern zwar die Komprimierungseffizienz, erhöhen aber deutlich den RAM-Bedarf — besonders bei der Verarbeitung vieler paralleler Streams.
Komprimierungslevel −1: Wenn level auf −1 gesetzt wird, verwendet zlib den internen Standardwert (ca. 6), was einen guten Kompromiss zwischen Geschwindigkeit und Komprimierungsrate darstellt.