Signatur
Beschreibung
gzcompress() komprimiert einen String mithilfe des DEFLATE-Algorithmus der ZLIB-Bibliothek. Die Funktion erzeugt dabei einen komprimierten Byte-String, der einen ZLIB-Header und eine Prüfsumme enthält – das Format entspricht dem RFC 1950 (ZLIB-Format), nicht dem gzip-Format (RFC 1952).
Typische Einsatzgebiete sind die Reduzierung von Datenmengen vor dem Speichern in Datenbanken oder Dateien, die Komprimierung von HTTP-Antworten sowie die Verkleinerung von Daten vor der Übertragung über ein Netzwerk. Die komprimierten Daten können mit gzuncompress() wieder entpackt werden.
Der Komprimierungsgrad $level kann zwischen 0 (keine Komprimierung) und 9 (maximale Komprimierung) liegen. Der Standardwert -1 verwendet den Standard-Komprimierungsgrad der ZLIB-Bibliothek (derzeit äquivalent zu Level 6), der einen guten Kompromiss zwischen Geschwindigkeit und Komprimierungsrate bietet.
Zu beachten ist, dass gzcompress() ein anderes Format erzeugt als gzencode() (gzip-Format) oder gzdeflate() (rohes DEFLATE ohne Header). Die Funktionen sind daher nicht austauschbar – die komprimierten Daten müssen mit der jeweils passenden Dekomprimierungsfunktion entpackt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Der zu komprimierende String. | |
| $level | int | -1 | Der Komprimierungsgrad: 0 = keine Komprimierung, 1 = schnellste Komprimierung, 9 = maximale Komprimierung, -1 = Standard der ZLIB-Bibliothek (empfohlen). |
| $encoding | int | ZLIB_ENCODING_DEFLATE | Der Kodierungsmodus. Mögliche Werte: ZLIB_ENCODING_RAW, ZLIB_ENCODING_DEFLATE oder ZLIB_ENCODING_GZIP. Seit PHP 7.0.0 verfügbar. |
Rückgabewert
false zurückgegeben.Beispiele
Einfache Komprimierung und Dekomprimierung
<?php
$originalData = 'Dies ist ein Teststring, der komprimiert werden soll. Je länger und repetitiver der Text, desto besser die Komprimierungsrate.';
$compressed = gzcompress($originalData);
$decompressed = gzuncompress($compressed);
echo 'Originalgröße: ' . strlen($originalData) . ' Bytes' . PHP_EOL;
echo 'Komprimiert: ' . strlen($compressed) . ' Bytes' . PHP_EOL;
echo 'Dekomprimiert: ' . $decompressed . PHP_EOL;
echo 'Identisch: ' . ($originalData === $decompressed ? 'Ja' : 'Nein') . PHP_EOL;
Komprimierte Daten in einer MySQL-Datenbank speichern
<?php
// Verbindung zu MySQL herstellen (PDO)
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass');
$largeContent = str_repeat('Beispielinhalt für die Datenbank. ', 500);
// Komprimieren vor dem Speichern (Level 6)
$compressed = gzcompress($largeContent, 6);
$stmt = $pdo->prepare('INSERT INTO documents (content_compressed) VALUES (:content)');
$stmt->execute([':content' => $compressed]);
echo 'Gespeichert. Originalgröße: ' . strlen($largeContent) . ' Bytes, '
. 'Komprimierte Größe: ' . strlen($compressed) . ' Bytes' . PHP_EOL;
// Beim Lesen wieder dekomprimieren
$stmt = $pdo->query('SELECT content_compressed FROM documents ORDER BY id DESC LIMIT 1');
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$restored = gzuncompress($row['content_compressed']);
echo 'Wiederhergestellt: ' . strlen($restored) . ' Bytes' . PHP_EOL;
Vergleich der Komprimierungsgrade
<?php
$data = str_repeat('PHP ist eine weit verbreitete serverseitige Skriptsprache. ', 100);
foreach ([0, 1, 5, 9] as $level) {
$compressed = gzcompress($data, $level);
printf('Level %d: %5d Bytes (%.1f%% des Originals)%s',
$level,
strlen($compressed),
strlen($compressed) / strlen($data) * 100,
PHP_EOL
);
}
// Wichtig · Fallstricke
Format-Kompatibilität: gzcompress() erzeugt das ZLIB-Format (RFC 1950) mit Header und Adler-32-Prüfsumme. Dieses Format ist nicht kompatibel mit gzip-Dateien (gzencode()) oder rohen DEFLATE-Daten (gzdeflate()). Verwende immer die passende Gegenfunktion: gzuncompress().
Binärdaten: Da komprimierte Daten Binärdaten enthalten, sollten sie vor dem Speichern in Textfeldern (z. B. VARCHAR) oder bei der Übertragung als Text mit base64_encode() kodiert werden. Für Datenbankfelder empfiehlt sich der Datentyp BLOB.
Speicherlimit: Bei sehr großen Strings kann die Komprimierung einen erheblichen Speicherbedarf verursachen. Für das Komprimieren großer Dateien ist die Verwendung von gzopen(), gzwrite() und gzclose() effizienter, da diese streambasiert arbeiten.
Voraussetzung: Die Funktion setzt voraus, dass PHP mit ZLIB-Unterstützung kompiliert wurde (PHP-Extension zlib). Diese ist in den meisten Standard-Installationen bereits aktiviert.