Signatur
Beschreibung
Der bzip2://-Stream-Wrapper erlaubt es, bzip2-komprimierte Dateien direkt über die üblichen PHP-Dateifunktionen wie fopen(), file_get_contents() oder file_put_contents() zu lesen und zu schreiben, ohne manuell komprimieren oder dekomprimieren zu müssen. Die Komprimierung und Dekomprimierung erfolgt vollständig transparent im Hintergrund.
Typische Verwendungsszenarien sind das Verarbeiten von komprimierten Log-Dateien, das Erstellen von Backups oder das Streamen großer Dateimengen mit reduziertem Speicherbedarf. Der Wrapper wird aktiviert, indem man den Pfad mit bzip2:// als Präfix versieht, gefolgt vom absoluten oder relativen Dateipfad.
Voraussetzung für die Nutzung ist, dass die bz2-Erweiterung in PHP aktiviert ist. Diese ist standardmäßig nicht immer aktiv und muss ggf. in der php.ini aktiviert oder als Paket nachinstalliert werden (php-bz2).
Im Vergleich zu bzopen() und den verwandten Funktionen der bz2-Erweiterung bietet der Stream-Wrapper den Vorteil, dass er sich nahtlos in stream-basierte APIs und Kontexte (z. B. stream_copy_to_stream()) integriert.
Beispiele
Komprimierte Datei lesen
<?php
// Liest den Inhalt einer bzip2-komprimierten Datei transparent
$inhalt = file_get_contents('bzip2:///var/log/archiv.log.bz2');
echo $inhalt;
Komprimierte Datei schreiben
<?php
// Schreibt Text komprimiert in eine .bz2-Datei
$text = "Dies ist ein Testinhalt, der komprimiert gespeichert wird.\n";
file_put_contents('bzip2:///tmp/ausgabe.bz2', $text);
// Datei wieder lesen und ausgeben
$gelesen = file_get_contents('bzip2:///tmp/ausgabe.bz2');
echo $gelesen;
Zeilenweises Lesen einer komprimierten Datei
<?php
// Öffnet eine bzip2-komprimierte Datei und liest sie zeilenweise
$handle = fopen('bzip2:///var/log/archiv.log.bz2', 'r');
if ($handle !== false) {
while (!feof($handle)) {
$zeile = fgets($handle);
if ($zeile !== false) {
echo htmlspecialchars($zeile);
}
}
fclose($handle);
} else {
echo 'Datei konnte nicht geöffnet werden.';
}
// Wichtig · Fallstricke
Erweiterung erforderlich: Der bzip2://-Wrapper ist nur verfügbar, wenn die PHP-Erweiterung bz2 geladen ist. Mit stream_get_wrappers() lässt sich prüfen, ob bzip2 in der Liste der verfügbaren Wrapper enthalten ist.
Kein wahlfreier Zugriff: bzip2-Streams unterstützen kein Seeking (fseek()), da das bzip2-Format sequenziell aufgebaut ist. Versuche, die Position im Stream zu ändern, schlagen fehl.
Schreibmodus: Beim Öffnen im Schreibmodus ('w') wird der Dateiinhalt vollständig überschrieben. Ein Anfügen ('a') an bestehende bzip2-Dateien ist nicht möglich und führt zu einem Fehler oder unbrauchbaren Daten.
Alternativer Präfix: Statt bzip2:// kann auch compress.bzip2:// verwendet werden — beide Schreibweisen sind gleichwertig und werden von PHP unterstützt.