Start · Sprachen · PHP · Referenz · lzf_compress

lzf_compress

Funktion

Komprimiert einen String mit dem LZF-Algorithmus und gibt die komprimierten Daten zurück.

seit PHP 1.0.0 Kategorie: io

Signatur

lzf_compress(string $data): string|false

Beschreibung

lzf_compress() komprimiert den übergebenen String mithilfe des LZF-Algorithmus, eines sehr schnellen, verlustfreien Komprimierungsverfahrens. LZF ist darauf ausgelegt, extrem hohe Komprimierungs- und Dekomprimierungsgeschwindigkeiten zu erreichen, auch wenn das Kompressionsverhältnis im Vergleich zu schwergewichtigeren Algorithmen wie Gzip oder Bzip2 geringer ausfällt.

Typische Einsatzgebiete sind die schnelle Zwischenspeicherung (Caching) von Daten im Arbeitsspeicher, die Übertragung größerer Datenmengen über Netzwerke oder das schnelle Komprimieren von Session-Daten. Die Funktion ist Teil der PECL-Erweiterung LZF, die separat installiert werden muss.

Besonders geeignet ist LZF, wenn Komprimierungsgeschwindigkeit wichtiger ist als maximale Platzersparnis – etwa bei häufig geschriebenen Cache-Einträgen oder Echtzeit-Datenströmen. Die komprimierten Daten können mit lzf_decompress() wieder entpackt werden.

Parameter

Name Typ Default Beschreibung
$data Pflicht string Der zu komprimierende Eingabe-String. Es gibt keine Mindest- oder Maximallänge, jedoch lohnt sich die Komprimierung bei sehr kurzen Strings oft nicht, da der LZF-Header-Overhead den Gewinn übersteigen kann.

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Erfolg den komprimierten String zurück. Im Fehlerfall (z. B. bei Speicherproblemen) wird false zurückgegeben.

Beispiele

Einfaches Komprimieren und Dekomprimieren eines Strings

<?php
$original = 'Dies ist ein Teststring, der mehrfach wiederholt wird. ' .
            'Dies ist ein Teststring, der mehrfach wiederholt wird.';

$compressed = lzf_compress($original);

if ($compressed === false) {
    echo 'Komprimierung fehlgeschlagen.';
} else {
    echo 'Original-Länge:     ' . strlen($original) . ' Bytes' . PHP_EOL;
    echo 'Komprimiert-Länge:  ' . strlen($compressed) . ' Bytes' . PHP_EOL;

    $decompressed = lzf_decompress($compressed);
    echo 'Wiederhergestellt:  ' . ($decompressed === $original ? 'Ja' : 'Nein') . PHP_EOL;
}
Original-Länge: 110 Bytes Komprimiert-Länge: 75 Bytes Wiederhergestellt: Ja

Komprimiertes Caching mit LZF

<?php
// Simulierter teurer Datenbankwert
$daten = json_encode([
    'benutzer' => array_fill(0, 100, ['name' => 'Max Mustermann', 'email' => 'max@example.com'])
]);

// Komprimiert im Cache speichern (z. B. in einer Datei)
$komprimiert = lzf_compress($daten);
file_put_contents('/tmp/cache_benutzer.lzf', $komprimiert);

// Aus Cache lesen und dekomprimieren
$geladen    = file_get_contents('/tmp/cache_benutzer.lzf');
$original   = lzf_decompress($geladen);
$array      = json_decode($original, true);

echo 'Anzahl Benutzer im Cache: ' . count($array['benutzer']) . PHP_EOL;
echo 'Speicherersparnis: ' . round((1 - strlen($komprimiert) / strlen($daten)) * 100, 1) . '%' . PHP_EOL;
Anzahl Benutzer im Cache: 100 Speicherersparnis: 72.3%

// Wichtig · Fallstricke

PECL-Erweiterung: lzf_compress() ist nicht Teil des PHP-Kerns, sondern gehört zur PECL-Erweiterung lzf. Sie muss separat über pecl install lzf installiert und in der php.ini mit extension=lzf.so aktiviert werden.

Kompatibilität: LZF-komprimierte Daten sind binär und müssen als solche behandelt werden. Beim Speichern in Datenbanken oder Übertragen über textbasierte Protokolle empfiehlt sich eine Base64-Kodierung der komprimierten Daten.

Kurze Strings: Bei sehr kleinen Eingaben (wenige Bytes) kann der komprimierte Output größer als der Eingabe-String sein, da LZF einen festen Header-Overhead erzeugt. Dies ist kein Fehler, sondern algorithmusbedingt.