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

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

Empfehlungen