Arbeiten mit ZIP-Archiven in PHP: ZipArchive und Bibliotheken zur Komprimierung

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

ZIP-Archive bleiben eines der beliebtesten Datenkomprimierungsformate in der Webentwicklung. In PHP wird die Arbeit mit ihnen nativ über die Erweiterung Zip realisiert, die die leistungsstarke Klasse ZipArchive bereitstellt. Dies ermöglicht Entwicklern, Dateien einfach zu erstellen, zu lesen, zu aktualisieren und aus Archiven zu extrahieren, ohne zusätzliche Drittanbieter-Bibliotheken installieren zu müssen.



Auf dem Bildungsportal PythonLib.ru werden wir alle Aspekte der Arbeit mit ZIP in PHP behandeln: von grundlegenden Operationen bis hin zu fortgeschrittenen Techniken, einschließlich passwortgeschützter Komprimierung, Verarbeitung großer Datenmengen und Integration mit Ausgabepufferung.



Installation und Überprüfung der Zip-Erweiterung

Die Klasse ZipArchive ist in PHP ab Version 5.2.0 verfügbar. Für ihre Verwendung muss sichergestellt werden, dass die Erweiterung zip in der Serverkonfiguration aktiviert ist. Dies kann mit der Funktion phpinfo() oder einem einfachen Skript überprüft werden:



<?phpif (class_exists('ZipArchive')) {    echo "Zip-Erweiterung ist verfügbar";} else {    echo "Zip-Erweiterung ist nicht installiert";}?>


Auf den meisten modernen Hosting-Plattformen ist die Erweiterung bereits vorinstalliert. Falls nicht, wenden Sie sich an Ihren Serveradministrator oder installieren Sie sie über den Paketmanager (z. B. apt-get install php-zip für Debian/Ubuntu).



Grundlegende Operationen mit ZipArchive

1. Erstellen eines neuen ZIP-Archivs

Zum Erstellen eines Archivs wird die Methode open() mit dem Flag ZipArchive::CREATE verwendet. Betrachten wir ein grundlegendes Beispiel:



<?php$zip = new ZipArchive();$filename = 'example.zip';

if ($zip->open($filename, ZipArchive::CREATE) === TRUE) { // Hinzufügen einer Datei aus einem String $zip->addFromString('hello.txt', 'Hallo, Welt!'); // Hinzufügen einer vorhandenen Datei $zip->addFile('/path/to/image.jpg', 'images/photo.jpg'); // Hinzufügen eines leeren Verzeichnisses $zip->addEmptyDir('documents'); $zip->close(); echo "Archiv erfolgreich erstellt";} else { echo "Fehler beim Erstellen des Archivs";}?>


Beachten Sie: Der zweite Parameter von addFile() gibt den Pfad innerhalb des Archivs an, was die Organisation einer Ordnerstruktur ermöglicht.



2. Entpacken eines ZIP-Archivs

Zum Extrahieren aller Dateien wird die Methode extractTo() verwendet:



<?php$zip = new ZipArchive();if ($zip->open('example.zip') === TRUE) {    $zip->extractTo('/destination/folder/');    $zip->close();    echo "Archiv entpackt";} else {    echo "Archiv konnte nicht geöffnet werden";}?>


Es kann auch nur eine bestimmte Datei extrahiert werden, indem ihr interner Pfad als zweites Argument angegeben wird:

$zip->extractTo('/destination/', 'images/photo.jpg');


3. Lesen des Archivinhalts ohne Entpacken

Manchmal ist es erforderlich, nur die Liste der Dateien im Archiv anzuzeigen:



<?php$zip = new ZipArchive();if ($zip->open('archive.zip') === TRUE) {    for ($i = 0; $i < $zip->numFiles; $i++) {        $stat = $zip->statIndex($i);        echo "Datei: " . $stat['name'] . " (Größe: " . $stat['size'] . " Bytes)";    }    $zip->close();}?>


Die Methode statIndex() gibt ein Array mit Informationen zurück: Name, Größe, Änderungsdatum, CRC32 und andere Metadaten.



Fortgeschrittene Möglichkeiten

Passwortgeschützte Komprimierung (PHP 7.2+)

Ab PHP 7.2 unterstützt ZipArchive die Verschlüsselung mit einem Passwort über den AES-256-Algorithmus:



<?php$zip = new ZipArchive();if ($zip->open('protected.zip', ZipArchive::CREATE) === TRUE) {    $zip->setPassword('supersecret');    $zip->addFile('document.pdf');    // Verschlüsselung für die zuletzt hinzugefügte Datei aktivieren    $zip->setEncryptionName('document.pdf', ZipArchive::EM_AES_256);    $zip->close();    echo "Verschlüsseltes Archiv erstellt";}?>


Zusätzlich können Sie den Fortschritt beim Erstellen großer Archive mit Callbacks überwachen oder Archive direkt aus dem Speicherstrom erstellen, ohne temporäre Dateien auf der Festplatte zu verwenden.

Empfehlungen