Start · Sprachen · PHP · Referenz · zip_entry_read

zip_entry_read

Funktion

Liest den Inhalt eines geöffneten ZIP-Eintrags und gibt ihn als Zeichenkette zurück.

seit PHP 4.1.0 Kategorie: io

Signatur

zip_entry_read(resource $zip_entry, int $length = 1024): string|false

Beschreibung

zip_entry_read() liest bis zu $length Bytes aus einem zuvor mit zip_entry_open() geöffneten ZIP-Eintrag und gibt die gelesenen Daten als Zeichenkette zurück. Die Funktion gehört zur älteren, prozeduralen ZIP-API von PHP und wird typischerweise in einer Schleife verwendet, um den vollständigen Inhalt einer Datei innerhalb eines ZIP-Archivs zu extrahieren.

Der Parameter $zip_entry muss ein gültiges Eintrags-Handle sein, das zuvor durch zip_read() ermittelt und mit zip_entry_open() geöffnet wurde. Der optionale Parameter $length gibt die maximale Anzahl an dekomprimierten Bytes an, die gelesen werden sollen; standardmäßig sind das 1024 Bytes.

Um den vollständigen Inhalt eines Eintrags zu lesen, empfiehlt es sich, zip_entry_filesize() zu verwenden und diesen Wert als $length zu übergeben. Alternativ kann der Inhalt schrittweise in einer Schleife gelesen werden, bis die Funktion einen leeren String oder false zurückgibt.

Hinweis: Diese prozedurale API gilt als veraltet. Für neue Projekte sollte stattdessen die objektorientierte Klasse ZipArchive verwendet werden, die mehr Funktionalität und bessere Fehlerbehandlung bietet.

Parameter

Name Typ Default Beschreibung
$zip_entry Pflicht resource Ein gültiges ZIP-Eintrags-Handle, das zuvor durch zip_read() erzeugt und mit zip_entry_open() geöffnet wurde.
$length int 1024 Die maximale Anzahl an Bytes, die aus dem dekomprimierten Inhalt des Eintrags gelesen werden sollen. Um den gesamten Inhalt auf einmal zu lesen, kann der Rückgabewert von zip_entry_filesize() übergeben werden.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die gelesenen Bytes als Zeichenkette zurück. Gibt einen leeren String zurück, wenn keine weiteren Daten vorhanden sind (Ende des Eintrags erreicht). Gibt false zurück, wenn ein Fehler auftritt, z. B. wenn der Eintrag nicht geöffnet wurde.

Beispiele

Vollständigen Inhalt einer Datei aus einem ZIP-Archiv lesen

<?php
$zip = zip_open('/pfad/zum/archiv.zip');

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $name = zip_entry_name($entry);
        echo "Datei: " . $name . "\n";

        if (zip_entry_open($zip, $entry, 'r')) {
            // Gesamte unkomprimierte Größe ermitteln
            $size = zip_entry_filesize($entry);

            if ($size > 0) {
                $inhalt = zip_entry_read($entry, $size);
                echo "Inhalt (" . strlen($inhalt) . " Bytes):\n";
                echo $inhalt . "\n";
            }

            zip_entry_close($entry);
        }
    }
    zip_close($zip);
} else {
    echo "Fehler beim Öffnen des ZIP-Archivs.\n";
}
?>
Datei: beispiel.txt Inhalt (42 Bytes): Dies ist der Inhalt der Beispieldatei.

Inhalt schrittweise in einer Schleife lesen

<?php
$zip = zip_open('/pfad/zum/archiv.zip');

if (is_resource($zip)) {
    $entry = zip_read($zip);

    if ($entry && zip_entry_open($zip, $entry)) {
        $inhalt = '';

        // Schrittweise je 512 Bytes lesen
        while ($chunk = zip_entry_read($entry, 512)) {
            $inhalt .= $chunk;
        }

        echo "Gelesener Inhalt:\n" . $inhalt . "\n";
        zip_entry_close($entry);
    }

    zip_close($zip);
}
?>
Gelesener Inhalt: Dies ist der Inhalt der Beispieldatei.

// Wichtig · Fallstricke

Veraltete API: Die prozedurale ZIP-Erweiterung (zip_open, zip_read, zip_entry_read usw.) gilt als veraltet und könnte in zukünftigen PHP-Versionen entfernt werden. Für neue Projekte sollte die Klasse ZipArchive bevorzugt werden.

Speicher: Beim Lesen sehr großer Dateien aus ZIP-Archiven sollte der Inhalt schrittweise (in Chunks) verarbeitet werden, anstatt die gesamte Datei auf einmal in den Speicher zu laden, um Speicherprobleme zu vermeiden.

Reihenfolge: zip_entry_read() darf erst nach einem erfolgreichen Aufruf von zip_entry_open() aufgerufen werden; andernfalls gibt die Funktion false zurück.