Start · Sprachen · PHP · Referenz · Zlib context options

Zlib context options

Funktion

Zlib-Kontextoptionen steuern die automatische Komprimierung und Dekomprimierung von Datenströmen über den <code>zlib://</code>-Streamwrapper.

seit PHP 5.1.0 Kategorie: misc

Signatur

stream_context_create(array $options)

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

Typ
resource
Beschreibung
Gibt eine Stream-Kontext-Ressource zurück, die anschließend an Streamfunktionen wie 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.';
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.';
}
Gelesener Inhalt: Dies ist ein Testtext, der komprimiert gespeichert wird.

// 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.