Signatur
Beschreibung
gzencode() komprimiert einen String mit dem DEFLATE-Algorithmus und verpackt das Ergebnis in einen gzip-kompatiblen Container (RFC 1952). Das Resultat kann direkt als .gz-Datei gespeichert oder über HTTP mit dem Header Content-Encoding: gzip an den Browser übertragen werden.
Der optionale Parameter $level steuert den Kompressionsgrad: 0 bedeutet keine Kompression, 9 maximale Kompression (langsamster Algorithmus). Der Standardwert -1 überlässt die Wahl dem zugrunde liegenden zlib, das üblicherweise Stufe 6 wählt – ein gutes Gleichgewicht zwischen Geschwindigkeit und Kompressionsrate.
Über den Parameter $encoding lässt sich zwischen einem echten gzip-Container (FORCE_GZIP) und einem zlib-Container (FORCE_DEFLATE) wählen. Für die Übertragung an Webbrowser und zum Speichern als .gz-Datei ist FORCE_GZIP die richtige Wahl.
Typische Einsatzbereiche sind die Reduktion von Übertragungsvolumen bei API-Antworten, das platzsparende Speichern von Log- oder Backup-Daten sowie die manuelle Ausgabe-Komprimierung, wenn ob_gzhandler oder zlib.output_compression nicht verfügbar sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Die zu komprimierende Zeichenkette. Kann beliebige Binär- oder Textdaten enthalten. | |
| $level | int | -1 | Kompressionsgrad von 0 (keine Kompression) bis 9 (maximale Kompression). -1 verwendet den zlib-Standard (ca. Stufe 6). |
| $encoding | int | FORCE_GZIP | Encoding-Modus: FORCE_GZIP (Standard, erzeugt echten gzip-Container) oder FORCE_DEFLATE (erzeugt zlib-Container ohne gzip-Header). |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Komprimieren und Dekomprimieren
<?php
$original = 'Dies ist ein langer Beispieltext, der komprimiert werden soll. ' .
'Je länger und repetitiver der Text, desto besser das Kompressionsergebnis.';
$compressed = gzencode($original, 9);
echo 'Originalgröße: ' . strlen($original) . ' Bytes' . PHP_EOL;
echo 'Komprimiert: ' . strlen($compressed) . ' Bytes' . PHP_EOL;
echo 'Kompressionsrate: ' . round((1 - strlen($compressed) / strlen($original)) * 100, 1) . ' %' . PHP_EOL;
// Wieder dekomprimieren
$restored = gzdecode($compressed);
echo 'Wiederhergestellt: ' . $restored . PHP_EOL;
Gzip-komprimierte HTTP-Antwort senden
<?php
$data = json_encode([
'status' => 'ok',
'items' => array_fill(0, 100, ['id' => 1, 'name' => 'Beispiel-Produkt', 'price' => 9.99]),
]);
$compressed = gzencode($data, 6);
if ($compressed !== false && isset($_SERVER['HTTP_ACCEPT_ENCODING'])
&& str_contains($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
header('Content-Encoding: gzip');
header('Content-Type: application/json; charset=utf-8');
header('Content-Length: ' . strlen($compressed));
echo $compressed;
} else {
header('Content-Type: application/json; charset=utf-8');
echo $data;
}
Komprimierten Inhalt als .gz-Datei speichern
<?php
$logData = implode(PHP_EOL, array_map(
fn(int $i) => date('Y-m-d H:i:s') . ' [INFO] Log-Eintrag Nummer ' . $i,
range(1, 1000)
));
$compressed = gzencode($logData, 6);
if ($compressed !== false) {
file_put_contents('/tmp/app-' . date('Ymd') . '.log.gz', $compressed);
echo 'Log gespeichert: ' . strlen($compressed) . ' Bytes (statt ' . strlen($logData) . ' Bytes unkomprimiert)';
} else {
echo 'Fehler bei der Komprimierung.';
}
// Wichtig · Fallstricke
Binäre Sicherheit: gzencode() ist binärsicher und kann sowohl Text als auch beliebige Binärdaten verarbeiten.
Nicht mit gzcompress() verwechseln: gzcompress() erzeugt einen rohen zlib-Stream (RFC 1950), gzencode() einen gzip-Container (RFC 1952). Die Ergebnisse sind nicht gegenseitig dekomprimierbar. Zum Dekomprimieren von gzencode()-Daten ist gzdecode() zu verwenden.
Höhere Kompressionsstufen kosten CPU: Stufe 9 kann für sehr große Strings deutlich mehr Rechenzeit benötigen als Stufe 6, liefert aber oft nur marginal bessere Kompressionsraten. Für Web-Anwendungen ist Stufe 5–6 meist der beste Kompromiss.
Voraussetzung: PHP muss mit zlib-Unterstützung kompiliert worden sein (--with-zlib).