Start · Sprachen · PHP · Referenz · bzread

bzread

Funktion

Liest bis zu <code>$length</code> unkomprimierte Bytes aus einer geöffneten bzip2-Datei und gibt sie als String zurück.

seit PHP 4.0.4 Kategorie: io

Signatur

bzread(resource $bz, int $length = 1024): string|false

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

Typ
string|false
Beschreibung
Gibt die gelesenen unkomprimierten Daten als String zurück. Am Dateiende wird ein leerer String '' 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;
?>
(Unkomprimierter Inhalt der bzip2-Datei)

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";
?>
Anzahl Zeilen: 42

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