Signatur
Beschreibung
bzwrite() schreibt den Inhalt des Parameters data in die mit bzopen() geöffnete bzip2-Datei. Die Funktion ist binär-sicher, das heißt, sie kann beliebige Binärdaten (auch solche mit Nullbytes) korrekt verarbeiten und in das bzip2-Format komprimieren.
Der optionale Parameter length begrenzt die Anzahl der zu schreibenden Bytes. Wird er weggelassen oder auf 0 gesetzt, wird der vollständige Inhalt von data geschrieben. Dies entspricht dem Verhalten von fwrite() für normale Dateien, nur dass die Ausgabe automatisch bzip2-komprimiert wird.
bzwrite() ist besonders nützlich, wenn große Datenmengen oder binäre Inhalte (z. B. Datenbankdumps, Logdateien oder Binärdateien) platzsparend auf dem Dateisystem gespeichert werden sollen. Die bzip2-Kompression erzielt in der Regel eine bessere Kompressionsrate als gzip.
Die zugehörige Datei muss zuvor mit bzopen() im Schreibmodus ('w') geöffnet worden sein. Nach dem Schreiben sollte die Datei mit bzclose() geschlossen werden, um sicherzustellen, dass alle internen bzip2-Puffer korrekt geleert und der Datei-Abschlussmarker geschrieben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $bz Pflicht | resource | Ein gültiges bzip2-Datei-Handle, das zuvor mit bzopen() im Schreibmodus ('w') geöffnet wurde. |
|
| $data Pflicht | string | Die zu schreibenden Daten als Zeichenkette. Darf beliebige Binärdaten einschließlich Nullbytes enthalten. | |
| $length | int | 0 | Optionale Anzahl der zu schreibenden Bytes aus data. Bei 0 (Standardwert) wird der gesamte Inhalt von data geschrieben. |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Schreiben eines Textes in eine bzip2-Datei
<?php
$bz = bzopen('/tmp/beispiel.bz2', 'w');
if ($bz === false) {
die('Datei konnte nicht geöffnet werden.');
}
$text = "Hallo, das ist ein komprimierter Text!\n";
$geschrieben = bzwrite($bz, $text);
echo "Bytes geschrieben: " . $geschrieben . "\n";
bzclose($bz);
Zeilenweises Schreiben einer Logdatei im bzip2-Format
<?php
$logeintraege = [
"2024-01-01 10:00:00 - Benutzer angemeldet\n",
"2024-01-01 10:05:00 - Datei hochgeladen\n",
"2024-01-01 10:10:00 - Benutzer abgemeldet\n",
];
$bz = bzopen('/tmp/anwendung.log.bz2', 'w');
if ($bz === false) {
die('Logdatei konnte nicht geöffnet werden.');
}
$gesamtBytes = 0;
foreach ($logeintraege as $zeile) {
$result = bzwrite($bz, $zeile);
if ($result === false) {
echo "Fehler beim Schreiben einer Zeile!\n";
} else {
$gesamtBytes += $result;
}
}
bzclose($bz);
echo "Insgesamt $gesamtBytes Bytes (unkomprimiert) in die bzip2-Datei geschrieben.\n";
Begrenztes Schreiben mit dem length-Parameter
<?php
$bz = bzopen('/tmp/begrenzt.bz2', 'w');
if ($bz === false) {
die('Datei konnte nicht geöffnet werden.');
}
$daten = "ABCDEFGHIJ";
// Nur die ersten 5 Bytes schreiben
$geschrieben = bzwrite($bz, $daten, 5);
echo "Bytes geschrieben: " . $geschrieben . "\n"; // Gibt 5 aus
bzclose($bz);
// Wichtig · Fallstricke
Wichtig: bzwrite() gibt die Anzahl der unkomprimierten Bytes zurück, nicht die tatsächliche Größe der auf dem Dateisystem gespeicherten Daten. Die tatsächliche Dateigröße ist je nach Kompressionsrate deutlich kleiner.
Die bzip2-Erweiterung ist nicht standardmäßig in allen PHP-Builds aktiviert. Sie muss beim Kompilieren mit --with-bz2 aktiviert werden oder über eine Paketverwaltung installiert werden. Prüfen Sie mit function_exists('bzwrite'), ob die Funktion verfügbar ist.
Wird bzclose() nach dem Schreiben nicht aufgerufen, kann die bzip2-Datei beschädigt oder unlesbar sein, da der abschließende Kompressionsblock nicht in die Datei geschrieben wird. Verwenden Sie daher stets bzclose() oder setzen Sie das Handle in einem try/finally-Block.