Signatur
Beschreibung
lzf_decompress() nimmt einen mit lzf_compress() komprimierten Binär-String und stellt die ursprünglichen Daten wieder her. Der LZF-Algorithmus ist ein sehr schneller, verlustfreier Kompressionsalgorithmus, der sich besonders für Szenarien eignet, in denen Geschwindigkeit wichtiger ist als das maximale Kompressionsverhältnis – zum Beispiel bei Cache-Daten, Session-Speicherung oder der Kommunikation zwischen Diensten.
Der optionale Parameter max_len begrenzt die maximale Länge des dekomprimierten Outputs in Bytes. Dies kann helfen, unkontrollierte Speicherbelegung zu verhindern, wenn die Länge des komprimierten Inhalts nicht vertrauenswürdig ist. Wird 0 übergeben oder der Parameter weggelassen, gibt es keine Längenbeschränkung.
Die Funktion ist Teil der PECL-Erweiterung LZF (pecl/lzf) und muss explizit installiert werden. Sie ist nicht im Standard-PHP-Lieferumfang enthalten. Die Erweiterung ist für PHP 5 und PHP 7/8 verfügbar.
Typische Einsatzgebiete sind die Dekomprimierung von in Redis, Memcache oder Dateien gespeicherten LZF-Daten, sowie die Verarbeitung von Binärprotokollen, die LZF-Kompression einsetzen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Der zu dekomprimierende, zuvor mit lzf_compress() erzeugte Binär-String. |
|
| $max_len | int | 0 | Maximale Länge des dekomprimierten Outputs in Bytes. 0 bedeutet keine Beschränkung. Nützlich, um Speicherüberläufe bei nicht vertrauenswürdigen Eingaben zu verhindern. |
Rückgabewert
false bei einem Fehler – zum Beispiel wenn die Eingabedaten kein gültiges LZF-Format haben oder max_len für den Inhalt zu klein gewählt wurde.Beispiele
Einfaches Komprimieren und Dekomprimieren
<?php
$original = 'Das ist ein Teststring, der mehrfach wiederholt wird. ' . str_repeat('PHP LZF Kompression. ', 20);
$compressed = lzf_compress($original);
echo 'Originalgröße: ' . strlen($original) . ' Bytes' . PHP_EOL;
echo 'Komprimiert: ' . strlen($compressed) . ' Bytes' . PHP_EOL;
$decompressed = lzf_decompress($compressed);
echo 'Dekomprimiert: ' . strlen($decompressed) . ' Bytes' . PHP_EOL;
echo 'Identisch: ' . ($original === $decompressed ? 'Ja' : 'Nein') . PHP_EOL;
Dekomprimierung mit max_len-Beschränkung und Fehlerbehandlung
<?php
$data = 'Wichtige Cache-Daten: ' . str_repeat('Beispiel ', 50);
$compressed = lzf_compress($data);
// Dekomprimierung mit einer Größenbeschränkung
$result = lzf_decompress($compressed, 100);
if ($result === false) {
echo 'Dekomprimierung fehlgeschlagen: Daten ungültig oder max_len zu klein.' . PHP_EOL;
} else {
echo 'Dekomprimiert (' . strlen($result) . ' Bytes): ' . $result . PHP_EOL;
}
// Dekomprimierung ohne Beschränkung
$result = lzf_decompress($compressed);
if ($result !== false) {
echo 'Vollständige Dekomprimierung: ' . strlen($result) . ' Bytes' . PHP_EOL;
}
// Wichtig · Fallstricke
Installation: Die LZF-Erweiterung ist nicht im Standard-PHP-Bundle enthalten. Installation via PECL: pecl install lzf. Anschließend muss extension=lzf.so (Linux) bzw. extension=php_lzf.dll (Windows) in der php.ini eingetragen werden.
Sicherheit: Dekomprimieren Sie niemals LZF-Daten aus nicht vertrauenswürdigen Quellen ohne max_len-Beschränkung. Ein Angreifer könnte speziell präparierte komprimierte Daten einschleusen, die nach der Dekomprimierung exzessiv viel Speicher verbrauchen (sogenannte Dekompressions-Bomben).
Kompatibilität: LZF-komprimierte Daten sind nicht kompatibel mit anderen Kompressionsformaten (gzip, bzip2, zlib). Stellen Sie sicher, dass Kompressor und Dekompressor jeweils die LZF-Bibliothek verwenden.