Signatur
Beschreibung
gzdeflate() komprimiert den übergebenen String mithilfe des DEFLATE-Algorithmus (RFC 1951). Die Funktion eignet sich besonders, wenn komprimierte Rohdaten ohne zusätzlichen Header benötigt werden – etwa zur Einbettung in eigene Protokolle oder Datenformate.
Im Gegensatz zu gzencode() (gzip-Format) oder gzcompress() (zlib-Format mit Header) erzeugt gzdeflate() nackte DEFLATE-Daten ohne Datei-Header. Die korrespondierende Dekomprimierungsfunktion ist gzinflate().
Der Kompressionsgrad kann über den Parameter level gesteuert werden. Der Wert -1 nutzt die Standardkompression der zlib-Bibliothek (üblicherweise Stufe 6), während 0 keine Kompression und 9 die maximale Kompression aktiviert. Höhere Stufen benötigen mehr CPU-Zeit, liefern aber kleinere Ausgaben.
Die Funktion ist sinnvoll, wenn beispielsweise HTTP-Antworten manuell mit Content-Encoding: deflate komprimiert oder Daten vor der Speicherung in einer Datenbank oder einem Cache verkleinert werden sollen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Die zu komprimierende Zeichenkette. | |
| $level | int | -1 | Kompressionsgrad von 0 (keine Kompression) bis 9 (maximale Kompression). -1 verwendet die zlib-Standardkompression. |
| $encoding | int | ZLIB_ENCODING_RAW | Kodierungsmodus. Mögliche Werte: ZLIB_ENCODING_RAW (Standard, reines DEFLATE), ZLIB_ENCODING_GZIP oder ZLIB_ENCODING_DEFLATE. Seit PHP 7.0 verfügbar. |
Rückgabewert
false zurückgegeben, etwa wenn ein ungültiger Kompressionsgrad angegeben wurde.Beispiele
Einfaches Komprimieren und Dekomprimieren eines Strings
<?php
$original = 'Dies ist ein Beispieltext, der komprimiert werden soll. Wiederholung: Beispieltext!';
$compressed = gzdeflate($original, 9);
if ($compressed === false) {
echo 'Komprimierung fehlgeschlagen.';
} else {
echo 'Originalgröße: ' . strlen($original) . ' Bytes' . PHP_EOL;
echo 'Komprimiert: ' . strlen($compressed) . ' Bytes' . PHP_EOL;
$decompressed = gzinflate($compressed);
echo 'Wiederhergestellt: ' . $decompressed . PHP_EOL;
}
Komprimierte Daten als HTTP-Antwort senden
<?php
$content = str_repeat('Lorem ipsum dolor sit amet, consectetur adipiscing elit. ', 100);
$compressed = gzdeflate($content, 6);
if ($compressed !== false) {
header('Content-Encoding: deflate');
header('Content-Length: ' . strlen($compressed));
header('Content-Type: text/plain; charset=utf-8');
echo $compressed;
} else {
// Fallback: unkomprimiert senden
header('Content-Type: text/plain; charset=utf-8');
echo $content;
}
Komprimierte Daten in einer Datenbank speichern und laden
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('CREATE TABLE cache (key TEXT PRIMARY KEY, value BLOB)');
$data = json_encode(['name' => 'Max', 'items' => range(1, 1000)]);
$compressed = gzdeflate($data, 6);
$stmt = $pdo->prepare('INSERT OR REPLACE INTO cache (key, value) VALUES (?, ?)');
$stmt->execute(['user_data', $compressed]);
// Laden und dekomprimieren
$row = $pdo->query('SELECT value FROM cache WHERE key = "user_data"')->fetch();
$restored = gzinflate($row['value']);
$decoded = json_decode($restored, true);
echo 'Name: ' . $decoded['name'] . PHP_EOL;
echo 'Anzahl Items: ' . count($decoded['items']) . PHP_EOL;
// Wichtig · Fallstricke
Format-Kompatibilität: Die von gzdeflate() erzeugten Daten enthalten keinen gzip- oder zlib-Header und können daher nicht mit gzuncompress() oder gzdecode() dekomprimiert werden. Verwende stets gzinflate() als Gegenstück.
Speicherbedarf: Die Funktion lädt den gesamten String in den Arbeitsspeicher. Bei sehr großen Datenmengen (mehrere MB) sollten stream-basierte Alternativen mit deflate_init() und deflate_add() in Betracht gezogen werden.
Kompressionsgrad wählen: Stufe 6 bietet in der Praxis ein gutes Verhältnis aus Geschwindigkeit und Kompressionsrate. Stufe 9 bringt oft nur marginale Größenvorteile bei deutlich höherem CPU-Aufwand.