Start · Sprachen · PHP · Referenz · gzdeflate

gzdeflate

Funktion

Komprimiert eine Zeichenkette mit dem DEFLATE-Algorithmus und gibt die komprimierten Daten zurück.

seit PHP 4.0.4 Kategorie: io

Signatur

gzdeflate(string $data, int $level = -1, int $encoding = ZLIB_ENCODING_RAW): string|false

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

Typ
string|false
Beschreibung
Gibt die komprimierten Daten als String zurück. Im Fehlerfall wird 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;
}
Originalgröße: 84 Bytes Komprimiert: 57 Bytes Wiederhergestellt: Dies ist ein Beispieltext, der komprimiert werden soll. Wiederholung: Beispieltext!

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;
Name: Max Anzahl Items: 1000

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