zip_entry_open()
Die Funktion zip_entry_open() in PHP öffnet einen Eintrag in einem Zip-Archiv zum Lesen. Veraltet seit PHP 7.4, entfernt in PHP 8.0.
⚠️ Hinweis zur Veraltung: Die Funktion zip_entry_open() gehört zur veralteten zip-Erweiterung, die in PHP 7.4 als veraltet markiert und in PHP 8.0 entfernt wurde. Die folgenden Beispiele dienen nur als historische Referenz. Verwenden Sie für moderne PHP-Anwendungen stattdessen die Klasse ZipArchive.
zip_entry_open() bereitet einen einzelnen Eintrag (eine Datei) innerhalb eines geöffneten Zip-Archivs vor, sodass dessen Inhalt gelesen werden kann. Die Funktion arbeitet Hand in Hand mit zip_open(), zip_read() und zip_entry_read(): Sie öffnen das Archiv, navigieren zu einem Eintrag, öffnen diesen Eintrag und lesen ihn dann aus. Ohne vorherigen Aufruf von zip_entry_open() hat zip_entry_read() nichts zum Lesen.
Diese Seite behandelt die Funktionssignatur, ihre Parameter und den Rückgabewert, ein vollständiges Beispiel zum Lesen eines Eintrags sowie – am wichtigsten – den modernen ZipArchive-Ersatz, den Sie heute verwenden sollten.
Syntax
resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")Parameter
| Parameter | Beschreibung |
|---|---|
$zip | Das Archiv-Handle, das von zip_open() zurückgegeben wird. |
$zip_entry | Ein Eintrags-Handle, das von zip_read() zurückgegeben wird. |
$mode | Der Zugriffsmodus. Die veraltete zip-Erweiterung unterstützte stets nur Lesezugriff, daher ist dieser Wert praktisch immer "r". |
Das vierte Argument
$password, das in einigen alten Referenzen zu sehen ist, war in der gebündeltenzip-Erweiterung nie funktional; es wird ignoriert.
Rückgabewert
Gibt bei Erfolg true oder bei Fehlschlag false zurück. Trotz des historischen Typhinweises resource erhalten Sie kein neues Handle zurück — Sie übergeben weiterhin dasselbe $zip_entry-Handle an zip_entry_read().
Verwendungsbeispiel
Beispiel: Eine Datei aus einem Zip-Archiv lesen
Öffnen Sie das Archiv, navigieren Sie zu einem Eintrag, öffnen Sie diesen Eintrag, lesen Sie ihn aus und bereinigen Sie anschließend:
$zip = zip_open("example.zip");
if (is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
// Prepare this entry for reading
if (zip_entry_open($zip, $zip_entry, "r")) {
$name = zip_entry_name($zip_entry);
$contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo "$name: $contents\n";
zip_entry_close($zip_entry);
}
}
zip_close($zip);
}Hier öffnet zip_open() das Archiv, zip_read() springt nacheinander zu jedem Eintrag, zip_entry_open() macht den aktuellen Eintrag lesbar, und zip_entry_read() gibt dessen Bytes zurück. Pairen Sie immer jeden erfolgreichen Öffnen-Aufruf mit zip_entry_close(), und schließen Sie das Archiv mit zip_close(), wenn Sie fertig sind.
Moderne Alternative: ZipArchive-Klasse
Um dasselbe Ergebnis in PHP 8.0+ zu erzielen, verwenden Sie die eingebaute Klasse ZipArchive:
$zip = new ZipArchive;
if ($zip->open('example.zip') === true) {
// Loop over every entry by index
for ($i = 0; $i < $zip->numFiles; $i++) {
$name = $zip->getNameIndex($i);
$contents = $zip->getFromIndex($i);
echo "$name: $contents\n";
}
$zip->close();
}ZipArchive benötigt keinen separaten Schritt zum „Öffnen des Eintrags": getFromIndex() (oder getFromName()) liest den Inhalt eines Eintrags direkt aus und funktioniert in jeder modernen PHP-Version.
Fazit
In diesem Artikel haben wir die PHP-Funktion zip_entry_open() besprochen und gezeigt, wie sie verwendet werden kann, um eine Datei in einem Zip-Archiv zu öffnen. Wir haben erklärt, was die Funktion tut, ihre Syntax erläutert und ein praktisches Beispiel bereitgestellt. Beachten Sie, dass zip_entry_open() veraltet ist und in PHP 8.0 entfernt wurde; verwenden Sie für moderne Projekte die Klasse ZipArchive, um Dateien in einem Zip-Archiv zu öffnen und zu lesen.