Start · Sprachen · PHP · Referenz · lzf_decompress

lzf_decompress

Funktion

Dekomprimiert einen mit LZF komprimierten String und gibt die ursprünglichen Rohdaten zurück.

seit PHP 1.0.0 Kategorie: io

Signatur

lzf_decompress(string $data, int $max_len = 0): string|false

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

Typ
string|false
Beschreibung
Gibt den dekomprimierten String zurück, oder 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;
Originalgröße: 484 Bytes Komprimiert: 97 Bytes Dekomprimiert: 484 Bytes Identisch: Ja

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;
}
Dekomprimierung fehlgeschlagen: Daten ungültig oder max_len zu klein. Vollständige Dekomprimierung: 472 Bytes

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