Einführung in die Arbeit mit ZIP-Archiven in PHP
Datenarchivierung ist eine grundlegende Aufgabe der Webentwicklung. Ob Datenbanksicherung, Verpacken von hochgeladenen Benutzerdateien oder Export großer Datenmengen – das ZIP-Format bleibt die beliebteste und vielseitigste Lösung. PHP bietet die integrierte Klasse ZipArchive, mit der Sie alle grundlegenden Operationen mit ZIP-Archiven durchführen können, ohne zusätzliche Erweiterungen installieren zu müssen.
In diesem Artikel werden wir im Detail besprechen, wie Sie ZipArchive in PHP verwenden: von der Erstellung eines einfachen Archivs bis zur Verarbeitung von verschachtelten Ordnern und Passwortschutz. Alle Codebeispiele sind bereit für den Einsatz auf Ihrem Server.
Vorbereitung: Überprüfung der Zip-Erweiterung
Bevor Sie beginnen, stellen Sie sicher, dass die Erweiterung zip auf Ihrem Server aktiviert ist. Normalerweise ist sie in modernen PHP-Versionen (7.4+, 8.x) standardmäßig installiert. Sie können dies mit der Funktion phpinfo() oder einem einfachen Skript überprüfen:
<?phpif (extension_loaded('zip')) { echo 'Die Zip-Erweiterung ist verfügbar';} else { echo 'Die Zip-Erweiterung wurde nicht gefunden. Installieren Sie sie über die php.ini';}?>Erstellen eines ZIP-Archivs in PHP
Schritt 1: Initialisieren des ZipArchive-Objekts
Erstellen Sie zunächst eine Instanz der Klasse ZipArchive und öffnen Sie ein neues Archiv mit der Methode open(). Der zweite Parameter – das Flag ZipArchive::CREATE – gibt an, dass das Archiv neu erstellt (oder überschrieben, falls es bereits existiert) wird.
<?php$zip = new ZipArchive();$zipName = 'example.zip';
if ($zip->open($zipName, ZipArchive::CREATE) !== TRUE) { exit("Das Archiv $zipName konnte nicht erstellt werden");}?>Schritt 2: Hinzufügen von Dateien zum Archiv
Die Methode addFile() fügt eine vorhandene Datei aus dem Dateisystem hinzu. Das erste Argument ist der Pfad zur Datei, das zweite (optional) der Name der Datei innerhalb des Archivs (falls Sie sie umbenennen möchten).
<?php// Eine einzelne Datei hinzufügen$zip->addFile('document.pdf', 'my_document.pdf');
// Mehrere Dateien hinzufügen$files = ['photo1.jpg', 'photo2.jpg', 'photo3.jpg'];foreach ($files as $file) { $zip->addFile($file);}?>Schritt 3: Hinzufügen eines gesamten Ordners unter Beibehaltung der Struktur
Wenn Sie ein Verzeichnis mit allen enthaltenen Dateien packen möchten, verwenden Sie einen rekursiven Durchlauf. Hier ist eine fertige Funktion:
<?phpfunction addFolderToZip($zip, $folder, $parentFolder = '') { $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($folder), RecursiveIteratorIterator::LEAVES_ONLY );
foreach ($files as $file) { if (!$file->isDir()) { $filePath = $file->getRealPath(); $relativePath = $parentFolder . $file->getFilename(); $zip->addFile($filePath, $relativePath); } }}
// Verwendung:$zip->addEmptyDir('my_folder'); // Ordner im Archiv erstellenaddFolderToZip($zip, '/path/to/source_folder', 'my_folder/');?>Schritt 4: Schließen des Archivs
Nachdem Sie alle Dateien hinzugefügt haben, müssen Sie das Archiv unbedingt schließen – andernfalls werden die Daten nicht geschrieben.
<?php$zip->close();echo "Das Archiv $zipName wurde erfolgreich erstellt!";?>Entpacken eines ZIP-Archivs in PHP
Zum Extrahieren von Dateien wird die Methode extractTo() verwendet. Geben Sie den Zielordner an, in den die Dateien entpackt werden sollen.
<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) { $zip->extractTo('/path/to/extract_folder/'); $zip->close(); echo 'Archiv erfolgreich entpackt';} else { echo 'Fehler beim Öffnen des Archivs';}?>Erweiterte Funktionen von ZipArchive
Hinzufügen eines Strings als Datei
Die Methode addFromString() ermöglicht es, eine Datei direkt aus einem String zu erstellen
Auch in der Bibliothek
OAuth-Client für TypeScript: Authentifizierung über GitHub, Google und andere Anbieter
HTML-Parsing in Kotlin: jsoup, ktor, khtml und andere Werkzeuge
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und PhpAmqpLib
Überwachung von Swift-Anwendungen: Bibliotheken für iOS und macOS
Konfiguration von C#-Anwendungen (.NET): Bibliotheken und Ansätze