Signatur
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
-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;
}
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
// 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().