Start · Sprachen · PHP · Referenz · bzdecompress

bzdecompress

Funktion

Dekomprimiert einen bzip2-komprimierten String und gibt die ursprünglichen Daten zurück.

seit PHP 4.0.4 Kategorie: io

Signatur

bzdecompress(string $data, int $use_less_memory = 0): string|false

Beschreibung

bzdecompress() dekomprimiert einen mit bzip2 komprimierten String direkt im Arbeitsspeicher und gibt die ursprünglichen, unkomprimierten Daten zurück. Die Funktion arbeitet ausschließlich auf Strings – für dateibasierte Operationen stehen die bzopen()/bzread()-Funktionen zur Verfügung.

Typischer Einsatzbereich ist die Dekomprimierung von bzip2-Daten, die z. B. aus einer Datenbank, einem Netzwerk-Stream oder einer vorher mit bzcompress() komprimierten Variable stammen. So lassen sich große Texte, Serialisierungen oder JSON-Strukturen platzsparend speichern und bei Bedarf wieder entpacken.

Der optionale Parameter use_less_memory aktiviert einen alternativen Dekomprimierungsalgorithmus, der weniger Arbeitsspeicher benötigt (ca. 2,5 MB statt 3,5 MB), dafür aber deutlich langsamer ist. Dieser Modus empfiehlt sich nur auf Systemen mit sehr knappem RAM.

Die Funktion erfordert, dass PHP mit der bzip2-Bibliothek kompiliert wurde (Erweiterung bz2). Ist die Erweiterung nicht vorhanden, steht bzdecompress() nicht zur Verfügung.

Parameter

Name Typ Default Beschreibung
$data Pflicht string Der bzip2-komprimierte String, der dekomprimiert werden soll.
$use_less_memory int 0 Wird dieser Parameter auf 1 gesetzt, verwendet die Funktion einen speicherschonenderen, aber langsameren Dekomprimierungsalgorithmus. Standard ist 0 (schnelle Methode).

Rückgabewert

Typ
string|false
Beschreibung
Gibt bei Erfolg den dekomprimierten String zurück. Im Fehlerfall (z. B. ungültige oder beschädigte Eingabedaten) wird false zurückgegeben.

Beispiele

Einfaches Komprimieren und anschließendes Dekomprimieren

<?php
$original = 'Dies ist ein langer Beispieltext, der komprimiert und dann wieder entpackt wird.';

// Komprimieren
$compressed = bzcompress($original, 9);
echo 'Komprimierte Länge: ' . strlen($compressed) . ' Bytes' . PHP_EOL;

// Dekomprimieren
$decompressed = bzdecompress($compressed);
echo 'Dekomprimierter Text: ' . $decompressed . PHP_EOL;

// Vergleich
echo 'Identisch: ' . ($original === $decompressed ? 'Ja' : 'Nein') . PHP_EOL;
Komprimierte Länge: 73 Bytes Dekomprimierter Text: Dies ist ein langer Beispieltext, der komprimiert und dann wieder entpackt wird. Identisch: Ja

Dekomprimierung von in der Datenbank gespeicherten bzip2-Daten

<?php
// Simuliert einen aus der Datenbank gelesenen bzip2-komprimierten Blob
$jsonData = json_encode(['name' => 'Max Mustermann', 'email' => 'max@example.com', 'role' => 'admin']);
$storedBlob = bzcompress($jsonData, 6);

// Später: Dekomprimieren und weiterverarbeiten
$result = bzdecompress($storedBlob);

if ($result === false) {
    echo 'Fehler: Daten konnten nicht dekomprimiert werden.';
} else {
    $data = json_decode($result, true);
    echo 'Name: ' . $data['name'] . PHP_EOL;
    echo 'E-Mail: ' . $data['email'] . PHP_EOL;
    echo 'Rolle: ' . $data['role'] . PHP_EOL;
}
Name: Max Mustermann E-Mail: max@example.com Rolle: admin

Speicherschonende Dekomprimierung mit use_less_memory

<?php
$compressed = bzcompress('Testdaten für speichersparende Dekomprimierung.', 9);

// use_less_memory = 1 aktiviert den alternativen Algorithmus
$decompressed = bzdecompress($compressed, 1);

echo $decompressed;
Testdaten für speichersparende Dekomprimierung.

// Wichtig · Fallstricke

Fehlerbehandlung: Überprüfen Sie den Rückgabewert stets auf false, bevor Sie das Ergebnis weiterverarbeiten. Beschädigte oder manipulierte komprimierte Daten führen zu false als Rückgabe.

Sicherheit: Dekomprimieren Sie niemals unkontrolliert Daten aus nicht vertrauenswürdigen Quellen ohne vorherige Validierung. Decompression Bombs (auch ZIP-Bomben genannt) können durch winzige komprimierte Eingaben extrem großen Speicherverbrauch verursachen. Prüfen Sie die erwartete Ausgabegröße, wenn die Eingabe aus einer externen Quelle stammt.

Erweiterung erforderlich: Die bz2-Erweiterung ist nicht in jeder PHP-Installation standardmäßig aktiv. Prüfen Sie die Verfügbarkeit mit function_exists('bzdecompress') oder extension_loaded('bz2').