Signatur
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
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.';
?>
Ö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.