Start · Sprachen · PHP · Referenz · bzopen

bzopen

Funktion

Öffnet eine bzip2-komprimierte Datei oder einen Stream zum Lesen oder Schreiben und gibt eine bzip2-Dateiressource zurück.

seit PHP 4.0.4 Kategorie: io

Signatur

bzopen(string|resource $file, string $mode): resource|false

Beschreibung

bzopen() öffnet eine bzip2-komprimierte Datei und gibt eine Dateiressource zurück, die anschließend mit anderen bzip2-Funktionen wie bzread(), bzwrite() und bzclose() verwendet werden kann. Die Funktion verhält sich ähnlich wie fopen(), arbeitet jedoch ausschließlich mit dem bzip2-Format.

Der Parameter $file kann entweder ein Dateipfad als Zeichenkette oder eine bereits geöffnete Dateiressource sein. Der Modus 'r' öffnet die Datei zum Lesen, 'w' zum Schreiben. Im Gegensatz zu fopen() sind nur diese beiden Modi zulässig; Anhängen ('a') wird nicht unterstützt.

bzopen() ist besonders nützlich, wenn große Textdateien oder Log-Daten im bzip2-Format gespeichert sind und zeilenweise oder blockweise verarbeitet werden sollen, ohne die gesamte Datei vorher dekomprimieren zu müssen. Auf diese Weise lässt sich Speicherplatz sparen, da die Daten on-the-fly komprimiert oder dekomprimiert werden.

Die Funktion setzt voraus, dass die PHP-Erweiterung bz2 installiert und aktiviert ist. Ist dies nicht der Fall, steht bzopen() nicht zur Verfügung und es kommt zu einem Fatal Error.

Parameter

Name Typ Default Beschreibung
$file Pflicht string|resource Pfad zur bzip2-Datei als Zeichenkette oder eine bereits geöffnete Dateiressource, die mit bzip2-Daten befüllt werden soll.
$mode Pflicht string Öffnungsmodus: 'r' zum Lesen oder 'w' zum Schreiben. Andere Modi wie 'a' oder 'x' werden nicht unterstützt und führen zu einem Fehler.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine bzip2-Dateiressource zurück, die mit bzread(), bzwrite() und bzclose() verwendet werden kann. Im Fehlerfall (z. B. Datei nicht gefunden, ungültiger Modus) wird false zurückgegeben.

Beispiele

Bzip2-Datei lesen

<?php
// Eine vorhandene .bz2-Datei öffnen und ihren Inhalt ausgeben
$bz = bzopen('/var/log/app.log.bz2', 'r');
if ($bz === false) {
    die('Datei konnte nicht geöffnet werden.');
}

while (!feof($bz)) {
    $zeile = bzread($bz, 4096);
    echo $zeile;
}

bzclose($bz);
?>

Daten in eine Bzip2-Datei schreiben

<?php
// Eine neue .bz2-Datei erstellen und Text komprimiert speichern
$bz = bzopen('/tmp/ausgabe.bz2', 'w');
if ($bz === false) {
    die('Datei konnte nicht erstellt werden.');
}

$daten = "Das ist eine Zeile.\nNoch eine Zeile.\n";
bzwrite($bz, $daten);

bzclose($bz);
echo 'Datei erfolgreich komprimiert gespeichert.';
?>
Datei erfolgreich komprimiert gespeichert.

Öffnen einer Ressource statt eines Dateipfads

<?php
// Dateiressource übergeben statt Pfad als String
$fp = fopen('/tmp/daten.bz2', 'rb');
if ($fp === false) {
    die('fopen fehlgeschlagen.');
}

$bz = bzopen($fp, 'r');
if ($bz === false) {
    fclose($fp);
    die('bzopen fehlgeschlagen.');
}

$inhalt = bzread($bz, 8192);
echo $inhalt;

bzclose($bz);
// $fp wird durch bzclose ebenfalls geschlossen
?>

// Wichtig · Fallstricke

Nur 'r' und 'w' als Modus: Das Anhängen ('a') an eine bestehende bzip2-Datei wird nicht unterstützt, da das bzip2-Format kein echtes Anhängen erlaubt. Versuche, 'a' zu übergeben, schlagen fehl.

Ressource wird durch bzclose() geschlossen: Wird bzopen() mit einer bereits geöffneten Dateiressource aufgerufen, schließt bzclose() auch diese zugrunde liegende Ressource. Eine separate fclose()-Anweisung ist dann nicht nötig und würde einen Fehler verursachen.

Erweiterung erforderlich: Die bz2-Erweiterung ist nicht immer standardmäßig aktiv. Prüfe die Verfügbarkeit mit function_exists('bzopen') oder prüfe phpinfo() auf den Eintrag bz2.