Einführung in die Arbeit mit ZIP-Archiven in PHP
Das Erstellen und Verarbeiten von ZIP-Archiven ist eine häufige Aufgabe in der Webentwicklung. In PHP wird diese Aufgabe mit der integrierten Erweiterung Zip gelöst, die die leistungsstarke und benutzerfreundliche Klasse ZipArchive bereitstellt. Damit können Sie neue Archive erstellen, vorhandene entpacken, Dateien hinzufügen oder löschen sowie mit Metadaten arbeiten.
In diesem Artikel werden wir alle grundlegenden Operationen mit ZIP-Archiven in PHP im Detail besprechen: von der einfachen Erstellung bis zur Fehlerbehandlung und der Arbeit mit Passwörtern. Alle Beispiele sind bereit für den Einsatz in Ihren Projekten.
Vorbereitung: Überprüfung der Verfügbarkeit der Zip-Erweiterung
Bevor Sie beginnen, stellen Sie sicher, dass die Erweiterung zip auf Ihrem Server installiert und aktiviert ist. Dies können Sie mit der Funktion phpinfo() oder einem einfachen Skript überprüfen:
<?phpif (extension_loaded('zip')) { echo "Zip-Erweiterung ist verfügbar";} else { echo "Zip-Erweiterung nicht gefunden";}?>Wenn die Erweiterung fehlt, installieren Sie sie über den Paketmanager Ihres Betriebssystems (z. B. apt install php-zip für Ubuntu) oder aktivieren Sie sie in der Datei php.ini.
Erstellen eines neuen ZIP-Archivs
Der einfachste Weg, ein Archiv zu erstellen, besteht darin, eine neue Datei im Schreibmodus zu öffnen und Dateien hinzuzufügen. Betrachten wir ein einfaches Beispiel:
<?php$zip = new ZipArchive();$filename = 'example.zip';
// Neues Archiv erstellen (ZIPARCHIVE::CREATE)if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Datei aus dem lokalen Dateisystem hinzufügen $zip->addFile('/path/to/file1.txt', 'file1.txt'); // Zeichenkette als neue Datei im Archiv hinzufügen $zip->addFromString('hello.txt', 'Hallo, Welt!'); // Ganzen Ordner hinzufügen (rekursiv) $zip->addGlob('/path/to/dir/*.*'); $zip->close(); echo "Archiv $filename erfolgreich erstellt";} else { echo "Fehler beim Erstellen des Archivs";}?>Beachten Sie: Der zweite Parameter von addFile() ist der Name der Datei innerhalb des Archivs. Wenn er nicht angegeben wird, wird die Datei mit dem ursprünglichen Namen gespeichert.
Entpacken eines ZIP-Archivs
Das Extrahieren von Dateien aus einem Archiv erfolgt mit der Methode extractTo(). Geben Sie den Zielordner an, in den die Dateien entpackt werden sollen:
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { // Alles in den Ordner 'unpacked' entpacken $zip->extractTo('/path/to/unpacked/'); $zip->close(); echo "Archiv entpackt";} else { echo "Fehler beim Öffnen des Archivs";}?>Wenn nur bestimmte Dateien extrahiert werden sollen, übergeben Sie deren Liste als drittes Argument:
$zip->extractTo('/path/to/unpacked/', ['file1.txt', 'hello.txt']);Inhalt des Archivs anzeigen
Manchmal ist es erforderlich, eine Liste der Dateien im Archiv zu erhalten, ohne es zu entpacken. Verwenden Sie dazu die Eigenschaften und Methoden von ZipArchive:
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { echo "Anzahl der Dateien: " . $zip->numFiles . "<br>"; for ($i = 0; $i < $zip->numFiles; $i++) { $stat = $zip->statIndex($i); echo "Datei: " . $stat['name'] . " (Größe: " . $stat['size'] . " Bytes)<br>"; } $zip->close();}?>Hinzufügen von Dateien unter Beibehaltung der Ordnerstruktur
Um die Verzeichnishierarchie beim Hinzufügen beizubehalten, verwenden Sie relative Pfade im Dateinamen innerhalb des Archivs:
<?php$zip = new ZipArchive();$zip->open('backup.zip', ZipArchive::CREATE);
// Datei mit Beibehaltung des Unterordners hinzufügen$zip->addFile('/var/www/images/photo.jpg', 'images/photo.jpg');// Oder rekursiv den gesamten Ordner$zip->addPattern('/\\.(jpg|png)$/', '/var/www/images/', ['add_path' => 'images/']);
$zip->close();?>Löschen von Dateien aus dem Archiv
Eine bestimmte Datei löschen
Auch in der Bibliothek
Go Validator: Vollständige Anleitung mit Beispielen
Redis-Client für Java: Jedis, Lettuce und Redisson – Überblick und Beispiele
Logging für Swift (iOS/macOS): Die besten Bibliotheken und Lösungen