Start · Sprachen · PHP · Referenz · zip_read

zip_read

Funktion

Liest den nächsten Eintrag innerhalb eines geöffneten ZIP-Archivs und gibt eine Ressource auf diesen Eintrag zurück.

seit PHP 4.1.0 Kategorie: io

Signatur

zip_read(resource $zip): resource|false

Beschreibung

zip_read() liest den nächsten Eintrag aus einem mit zip_open() geöffneten ZIP-Archiv. Die Funktion arbeitet wie ein Iterator: Jeder Aufruf rückt den internen Zeiger einen Schritt weiter und gibt eine Ressource auf den gefundenen Eintrag zurück. Ist kein weiterer Eintrag vorhanden, wird false zurückgegeben.

Die zurückgegebene Eintrags-Ressource kann anschließend mit Funktionen wie zip_entry_name(), zip_entry_filesize(), zip_entry_open() und zip_entry_read() weiterverarbeitet werden, um Metadaten abzufragen oder den Inhalt des Eintrags zu lesen.

Hinweis: Die prozeduralen zip_*-Funktionen gelten als veraltet. Für neue Projekte wird empfohlen, stattdessen die objektorientierte Klasse ZipArchive zu verwenden, die eine vollständige und modernere API bietet.

Parameter

Name Typ Default Beschreibung
$zip Pflicht resource Eine gültige ZIP-Ressource, die zuvor mit zip_open() geöffnet wurde.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt eine Ressource zurück, die den nächsten Eintrag im Archiv repräsentiert, oder false, wenn keine weiteren Einträge vorhanden sind oder ein Fehler aufgetreten ist.

Beispiele

Alle Einträge eines ZIP-Archivs auflisten

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

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        $name = zip_entry_name($entry);
        $size = zip_entry_filesize($entry);
        echo "Eintrag: {$name} (unkomprimierte Größe: {$size} Bytes)\n";
    }
    zip_close($zip);
} else {
    echo "Fehler beim Öffnen des Archivs. Fehlercode: {$zip}\n";
}
Eintrag: bilder/foto.jpg (unkomprimierte Größe: 204800 Bytes) Eintrag: dokumente/readme.txt (unkomprimierte Größe: 1024 Bytes)

Inhalt einer bestimmten Datei aus dem ZIP-Archiv lesen

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

if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        if (zip_entry_name($entry) === 'dokumente/readme.txt') {
            if (zip_entry_open($zip, $entry, 'r')) {
                $inhalt = zip_entry_read($entry, zip_entry_filesize($entry));
                echo "Inhalt von readme.txt:\n";
                echo $inhalt;
                zip_entry_close($entry);
            }
        }
    }
    zip_close($zip);
}
Inhalt von readme.txt: Dies ist eine Beispiel-Readme-Datei.

// Wichtig · Fallstricke

Veraltet: Die prozeduralen ZIP-Funktionen (zip_open, zip_read, zip_entry_* usw.) sind seit PHP 8.0 offiziell als veraltet markiert und sollten in neuen Projekten nicht mehr verwendet werden. Nutzen Sie stattdessen die Klasse ZipArchive.

Da zip_read() sowohl im Fehlerfall als auch am Ende des Archivs false zurückgibt, ist eine genaue Fehlerbehandlung erschwert. Prüfen Sie daher vorab mit is_resource(), ob das Archiv korrekt geöffnet wurde.