Start · Sprachen · PHP · Referenz · bzclose

bzclose

Funktion

Schließt eine zuvor mit <code>bzopen()</code> geöffnete bzip2-Datei und gibt alle damit verbundenen Ressourcen frei.

seit PHP 4.0.4 Kategorie: io

Signatur

bzclose(resource $bz): int

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

Typ
int
Beschreibung
Gibt 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.';
}
?>
Datei erfolgreich geschlossen.

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);
?>
Gelesener Inhalt: Das ist ein Testtext, der bzip2-komprimiert wird.

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