Start · Sprachen · PHP · Referenz · bzip2://

bzip2://

Funktion

Stream-Wrapper für bzip2-komprimierte Dateien, der transparentes Lesen und Schreiben von <code>.bz2</code>-Dateien ermöglicht.

seit PHP 4.0.4 Kategorie: misc

Signatur

bzip2://

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;
(Inhalt der dekomprimierten Datei)

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;
Dies ist ein Testinhalt, der komprimiert gespeichert wird.

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.';
}
(Inhalt der komprimierten Datei, zeilenweise ausgegeben)

// 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.