Arbeiten mit ZIP-Archiven in PHP: vollständige Anleitung zu ZipArchive

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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

Empfehlungen