Start · Sprachen · PHP · Referenz · bzcompress

bzcompress

Funktion

Komprimiert eine Zeichenkette mit dem bzip2-Algorithmus und gibt die komprimierten Daten zurück.

seit PHP 4.0.4 Kategorie: io

Signatur

bzcompress(string $data, int $block_size = 4, int $work_factor = 0): string|int

Beschreibung

bzcompress() komprimiert den übergebenen String mithilfe des bzip2-Kompressionsalgorithmus. Die Funktion ist nützlich, um Daten vor der Speicherung in einer Datenbank oder vor der Übertragung über ein Netzwerk zu verkleinern, wenn die bzip2-Kompression einer gzip-Kompression vorzuziehen ist (z. B. bei höherer Kompressionsrate auf Kosten der Geschwindigkeit).

Der Parameter block_size steuert die Blockgröße beim Komprimieren und hat direkten Einfluss auf das Verhältnis zwischen Kompressionsrate und Speicherbedarf. Ein höherer Wert führt in der Regel zu besserer Kompression, benötigt aber mehr Arbeitsspeicher. Der Parameter work_factor beeinflusst das Verhalten bei ungünstig strukturierten Eingabedaten (Worst-Case-Szenarien) und erlaubt die Steuerung des Aufwands für den Fallback-Algorithmus.

Die Funktion gibt bei Erfolg den komprimierten String zurück. Im Fehlerfall wird ein Integer-Fehlercode zurückgegeben. Die resultierende Zeichenkette enthält einen vollständigen bzip2-Stream und kann direkt in eine .bz2-Datei geschrieben oder mit bzdecompress() wieder entpackt werden.

Damit bzcompress() verfügbar ist, muss PHP mit der bzip2-Erweiterung kompiliert worden sein (üblicherweise über --with-bz2 beim Build oder als installiertes Paket).

Parameter

Name Typ Default Beschreibung
$data Pflicht string Die zu komprimierende Zeichenkette. Kann beliebige Binär- oder Textdaten enthalten.
$block_size int 4 Legt die Blockgröße für den Kompressionsalgorithmus fest. Gültige Werte sind 1 bis 9. Ein höherer Wert bedeutet bessere Kompression bei höherem Speicherbedarf (ca. 100 kB × block_size).
$work_factor int 0 Steuert den Aufwand des Fallback-Algorithmus bei ungünstigen Eingaben. Gültige Werte sind 0 bis 250. Der Wert 0 entspricht dem internen Standard (30). Größere Werte erhöhen die Kompressionsarbeit für Worst-Case-Daten.

Rückgabewert

Typ
string|int
Beschreibung
Gibt bei Erfolg den komprimierten Daten-String zurück. Im Fehlerfall wird ein negativer Integer-Fehlercode zurückgegeben (bzip2-interne Fehlercodes, z. B. -2 für einen Parameterübergabefehler).

Beispiele

Einfache Komprimierung und Dekomprimierung eines Strings

<?php
$original = 'Dies ist ein längerer Text, der komprimiert werden soll. ' .
            str_repeat('PHP macht Spaß! ', 50);

$compressed = bzcompress($original, 9);

if (is_int($compressed)) {
    echo 'Fehler beim Komprimieren: ' . $compressed;
} else {
    echo 'Original:     ' . strlen($original) . ' Bytes' . PHP_EOL;
    echo 'Komprimiert:  ' . strlen($compressed) . ' Bytes' . PHP_EOL;
    echo 'Kompressionsrate: ' . round((1 - strlen($compressed) / strlen($original)) * 100, 1) . '%' . PHP_EOL;

    // Dekomprimieren zur Überprüfung
    $decompressed = bzdecompress($compressed);
    echo 'Identisch: ' . ($decompressed === $original ? 'Ja' : 'Nein') . PHP_EOL;
}
Original: 850 Bytes Komprimiert: 76 Bytes Kompressionsrate: 91.1% Identisch: Ja

Komprimierte Daten in eine Datei schreiben

<?php
$data = file_get_contents('/etc/hosts');

if ($data === false) {
    die('Datei konnte nicht gelesen werden.');
}

$compressed = bzcompress($data, 6);

if (is_int($compressed)) {
    die('Komprimierungsfehler: ' . $compressed);
}

// Komprimierte Daten als .bz2-Datei speichern
$bytesWritten = file_put_contents('/tmp/hosts.bz2', $compressed);
echo 'Geschrieben: ' . $bytesWritten . ' Bytes in /tmp/hosts.bz2' . PHP_EOL;

// Inhalt kann mit bzdecompress() oder dem CLI-Tool bzip2 -d wiederhergestellt werden
Geschrieben: 312 Bytes in /tmp/hosts.bz2

// Wichtig · Fallstricke

Fehlerbehandlung: Der Rückgabetyp ist entweder string (Erfolg) oder int (Fehler). Daher sollte nach dem Aufruf immer mit is_int() geprüft werden, ob ein Fehler aufgetreten ist, bevor der Rückgabewert weiterverwendet wird.

Erweiterung erforderlich: Die Funktion ist nur verfügbar, wenn die bz2-Erweiterung geladen ist. Unter Linux kann das Paket meist über apt install php-bz2 oder yum install php-bz2 nachinstalliert werden. Prüfe die Verfügbarkeit mit function_exists('bzcompress').

Speicherbedarf: Bei großen Eingaben und hohem block_size-Wert kann der Speicherbedarf erheblich steigen. Für sehr große Datenmengen empfiehlt sich die Arbeit mit bzip2-Dateiströmen über bzopen(), bzwrite() und bzclose().