Signatur
Beschreibung
bzclose() schließt eine bzip2-komprimierte Datei, die über bzopen() geöffnet wurde. Nach dem Aufruf wird der zugehörige Datei-Handle ungültig und alle noch nicht geschriebenen Daten werden auf die Festplatte gespült (flush). Analog zu fclose() für reguläre Dateien ist bzclose() das Gegenstück für bzip2-Ressourcen.
Das Schließen einer bzip2-Datei nach dem Schreiben ist besonders wichtig, da erst beim Schließen die abschließenden Komprimierungsdaten und der bzip2-Footer in die Datei geschrieben werden. Wird die Datei nicht explizit geschlossen, kann die erzeugte Datei korrupt und nicht mehr dekomprimierbar sein.
In modernem PHP (ab PHP 8.0) können bzip2-Ressourcen auch mit der allgemeinen Funktion fclose() geschlossen werden, da bzip2-Streams als Stream-Wrapper implementiert sind. Die Verwendung von bzclose() bleibt jedoch expliziter und lesbarer.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $bz Pflicht | resource | Der bzip2-Datei-Handle, der zuvor durch bzopen() zurückgegeben wurde. |
Rückgabewert
true (bzw. 1) bei Erfolg zurück, oder false bei einem Fehler, z. B. wenn der übergebene Handle ungültig ist.Beispiele
bzip2-Datei schreiben und korrekt schließen
<?php
// bzip2-Datei zum Schreiben öffnen
$bz = bzopen('/tmp/beispiel.bz2', 'w');
if ($bz === false) {
die('Fehler beim Öffnen der Datei.');
}
// Daten in die bzip2-Datei schreiben
bzwrite($bz, 'Das ist ein Testtext, der bzip2-komprimiert wird.');
// Datei schließen – wichtig, damit der bzip2-Footer geschrieben wird
$result = bzclose($bz);
if ($result) {
echo 'Datei erfolgreich geschlossen.';
} else {
echo 'Fehler beim Schließen der Datei.';
}
?>
bzip2-Datei lesen und schließen
<?php
// bzip2-Datei zum Lesen öffnen
$bz = bzopen('/tmp/beispiel.bz2', 'r');
if ($bz === false) {
die('Fehler beim Öffnen der Datei.');
}
// Dateiinhalt lesen
$inhalt = '';
while (!feof($bz)) {
$inhalt .= bzread($bz, 1024);
}
echo 'Gelesener Inhalt: ' . $inhalt . PHP_EOL;
// Datei schließen
bzclose($bz);
?>
// Wichtig · Fallstricke
Achtung beim Schreiben: Wird bzclose() nach einem Schreibvorgang vergessen, kann die erzeugte .bz2-Datei unvollständig und damit korrupt sein, da der abschließende bzip2-Stream-Footer fehlt. Stellen Sie sicher, dass bzclose() auch im Fehlerfall aufgerufen wird, z. B. durch einen try/finally-Block.
Ab PHP 8.0 werden bzip2-Ressourcen intern als Stream-Wrapper behandelt. Das bedeutet, dass fclose() ebenfalls funktioniert. Für ältere PHP-Versionen sollte jedoch stets bzclose() verwendet werden.