zip_open()
Die Funktion zip_open() ist eine in PHP integrierte Funktion zum Öffnen einer ZIP-Archivdatei. Sie gibt eine ZIP-Archiv-Ressource zurück.
Hinweis:
zip_open()wurde in PHP 7.1 als veraltet markiert und in PHP 8.0 entfernt. Diese Funktion wird nur aus Gründen der Legacy-Kompatibilität bereitgestellt. Verwenden Sie für moderne PHP-Anwendungen stattdessen die KlasseZipArchive.
Die Funktion zip_open() ist eine in PHP integrierte Funktion, die zum Öffnen einer ZIP-Archivdatei verwendet wurde. Die Funktion gibt eine ZIP-Archiv-Ressource zurück, die zum Lesen und Bearbeiten des Archivinhalts verwendet werden kann.
Syntax
Die Syntax der Funktion zip_open() lautet wie folgt:
Syntax der Funktion zip_open() in PHP
resource zip_open(string $filename [, int $flags [, string &$error ]])Dabei gilt:
$filenameist der Pfad zur zu öffnenden ZIP-Archivdatei.$flagsist ein optionaler Integer mit Flags, die das Öffnen des Archivs beeinflussen. In der Praxis wird dieser Parameter selten verwendet und in der Regel als0übergeben.$errorist eine optionale Referenzvariable. Wenn das Öffnen fehlschlägt, setzt PHP sie auf einen numerischen Fehlercode, sodass Sie erfahren können, warum das Öffnen gescheitert ist.
Bei Erfolg gibt die Funktion eine ZIP-Archiv-Ressource (ein undurchsichtiges Handle) zurück. Bei einem Fehler gibt sie entweder false oder, in manchen Builds, einen Integer-Fehlercode zurück — testen Sie das Ergebnis daher immer, bevor Sie es verwenden.
Warum wurde sie entfernt?
zip_open() gehört zur alten prozeduralen ZIP-API (zip_open(), zip_read(), zip_close() und den Hilfsfunktionen zip_entry_*()). Diese API wurde in PHP 7.1 als veraltet markiert und in PHP 8.0 vollständig entfernt. Der Ersatz ist die objektorientierte Klasse ZipArchive, die schneller ist, Archive sowohl lesen als auch schreiben kann und die noch heute gepflegt wird.
Verwendungsbeispiele
Vergleichen wir den Legacy-Ansatz mit dem modernen, den Sie tatsächlich verwenden sollten.
Beispiel: Öffnen eines ZIP-Archivs (Legacy-API)
Angenommen, Sie haben eine ZIP-Archivdatei example.zip und möchten sie öffnen. Mit der alten API würden Sie zip_open() aufrufen und das Ergebnis prüfen:
Öffnen einer ZIP-Archivdatei in PHP (nur PHP < 8.0)
$zip = zip_open("example.zip");
// On failure the function returns an integer error code instead of a resource.
if (is_resource($zip)) {
echo "Archive opened successfully.";
zip_close($zip);
} else {
echo "Failed to open archive. Error code: " . $zip;
}Dieser Code versucht, example.zip zu öffnen. Da die Funktion bei Erfolg eine Ressource, bei einem Fehler jedoch einen Integer-Fehlercode zurückgibt, ist is_resource() die sicherste Prüfmethode. Zum Lesen oder Extrahieren von Einträgen sind dann die Begleitfunktionen zip_read(), zip_entry_open() und zip_entry_read() erforderlich — die in PHP 8.0 ebenfalls entfernt wurden.
Beispiel: Das moderne Äquivalent mit ZipArchive
Auf allen unterstützten PHP-Versionen (7.x und 8.x) können Sie dasselbe mit der Klasse ZipArchive erreichen. ZipArchive::open() gibt bei Erfolg true oder bei einem Fehler einen Fehlercode zurück:
Öffnen und Lesen eines ZIP-Archivs mit ZipArchive
$zip = new ZipArchive();
if ($zip->open("example.zip") === true) {
echo "Archive opened. It contains {$zip->numFiles} file(s).\n";
// Read the first entry's name as an example.
if ($zip->numFiles > 0) {
echo "First entry: " . $zip->getNameIndex(0) . "\n";
}
$zip->close();
} else {
echo "Failed to open archive.\n";
}ZipArchive fasst die Schritte Öffnen, Untersuchen und Schließen in einem gut dokumentierten Objekt zusammen und kann im Gegensatz zur Legacy-API Archive auch erstellen und ändern – mit addFile() und addFromString().
Fazit
In diesem Artikel haben wir die Legacy-Funktion zip_open() besprochen – ihre Syntax, die Parameter $flags und $error, ihre Rückgabewerte und wie man das Ergebnis mit is_resource() prüft. Da zip_open() in PHP 8.0 entfernt wurde, sollten Sie sie nur als historische Referenz betrachten: Moderne Anwendungen sollten für eine zuverlässige und sichere Archivverwaltung die Klasse ZipArchive verwenden. Siehe auch zip_read() und zip_close() für den Rest der Legacy-API.