Signatur
Beschreibung
bzread() liest Daten aus einer bzip2-komprimierten Datei, die zuvor mit bzopen() geöffnet wurde. Die Funktion dekomprimiert die Daten on-the-fly und gibt den resultierenden unkomprimierten Inhalt zurück. Das Lesen erfolgt binär-sicher, d. h. es werden keine Zeichenumwandlungen vorgenommen, sodass auch beliebige Binärdaten korrekt verarbeitet werden.
Der optionale Parameter $length gibt an, wie viele unkomprimierte Bytes maximal gelesen werden sollen. Standardmäßig werden 1024 Bytes gelesen. Um den gesamten Inhalt einer Datei zu lesen, ruft man bzread() in einer Schleife auf, bis die Funktion einen leeren String oder false zurückgibt.
Die Funktion ist besonders nützlich, wenn große bzip2-Archive stückweise verarbeitet werden sollen, ohne die gesamte Datei auf einmal in den Speicher zu laden. In Kombination mit bzeof() lässt sich das Dateiende zuverlässig erkennen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $bz Pflicht | resource | Ein gültiges bzip2-Datei-Handle, das mit bzopen() im Lesemodus ('r') geöffnet wurde. |
|
| $length | int | 1024 | Maximale Anzahl unkomprimierter Bytes, die gelesen werden sollen. Wird dieser Wert nicht angegeben, werden standardmäßig 1024 Bytes gelesen. |
Rückgabewert
'' zurückgegeben. Bei einem Fehler wird false zurückgegeben.Beispiele
Gesamten Inhalt einer bzip2-Datei lesen
<?php
$bz = bzopen('/pfad/zur/datei.bz2', 'r');
if ($bz === false) {
die('Datei konnte nicht geöffnet werden.');
}
$inhalt = '';
while (!feof($bz)) {
$chunk = bzread($bz, 4096);
if ($chunk === false) {
die('Lesefehler aufgetreten.');
}
$inhalt .= $chunk;
}
bzclose($bz);
echo $inhalt;
?>
bzip2-Datei zeilenweise verarbeiten
<?php
// Beispiel: Zählen der Zeilen in einer komprimierten Textdatei
$bz = bzopen('/pfad/zur/log.bz2', 'r');
if ($bz === false) {
die('Datei konnte nicht geöffnet werden.');
}
$puffer = '';
$zeilenAnzahl = 0;
while (!bzeof($bz)) {
$chunk = bzread($bz, 8192);
if ($chunk === false) {
break;
}
$puffer .= $chunk;
// Zeilen aus Puffer extrahieren
$zeilen = explode("\n", $puffer);
// Letzte (möglicherweise unvollständige) Zeile zurück in Puffer
$puffer = array_pop($zeilen);
$zeilenAnzahl += count($zeilen);
}
// Letzten Rest des Puffers berücksichtigen
if ($puffer !== '') {
$zeilenAnzahl++;
}
bzclose($bz);
echo "Anzahl Zeilen: $zeilenAnzahl\n";
?>
// Wichtig · Fallstricke
Wichtig: Das Dateiende kann nicht zuverlässig mit feof() erkannt werden, da es sich um ein bzip2-Handle handelt. Verwende stattdessen bzeof() oder prüfe, ob bzread() einen leeren String zurückgibt.
Die bzip2-Erweiterung muss beim Kompilieren von PHP aktiviert worden sein (--with-bz2) oder als gemeinsam genutztes Modul geladen werden. Prüfe mit function_exists('bzread'), ob die Funktion verfügbar ist.
Der $length-Parameter bezieht sich auf die Anzahl der unkomprimierten Bytes. Die tatsächlich aus der Datei gelesene Menge komprimierter Daten kann erheblich kleiner sein.