Bei der Arbeit mit ZIP-komprimierten Dateien, insbesondere wenn sie ein komprimiertes Paket mit einer mehrstufigen Verzeichnisstruktur enthält, ist sicherzustellen, dass das Zielverzeichnis ein sehr wichtiger Schritt ist. Andernfalls kann die Datei fehlschlagen, da der Zielpfad nicht vorhanden ist. In diesem Artikel wird vorgestellt, wie die Funktion zip_read () verwendet wird, um jeden Eintrag der ZIP -Datei zu lesen und File_exists () und Mkdir () zu kombinieren, um das erforderliche Verzeichnis automatisch zu erstellen, wodurch ein stabiler Datei -Extraktionsprozess erreicht wird.
Stellen Sie sicher, dass Ihre PHP -Umgebung eine Zip -Erweiterung aktiviert hat. Sie können den folgenden Code verwenden, um festzustellen:
<?php
if (!class_exists('ZipArchive')) {
die('Zip Erweiterung nicht aktiviert');
}
?>
Das Folgende ist der vollständige Beispielcode, der das Lesen von Dateien und Verzeichnissen aus ZIP -Dateien implementiert und automatisch eine Verzeichnisstruktur erstellt:
<?php
$zipPath = 'example.zip'; // ZIP Dateipfad
$extractTo = 'output/'; // Das Verzeichnis entpacken
$zip = zip_open($zipPath);
if (!is_resource($zip)) {
die('Nicht öffnen können ZIP dokumentieren');
}
while ($entry = zip_read($zip)) {
$entryName = zip_entry_name($entry);
$fullPath = $extractTo . $entryName;
// Verzeichnispfad erhalten
$dir = dirname($fullPath);
// Automatisch Verzeichnisse erstellen
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
// 如果是dokumentieren,Inhalte lesen und schreiben
if (zip_entry_open($zip, $entry, "r")) {
$content = zip_entry_read($entry, zip_entry_filesize($entry));
file_put_contents($fullPath, $content);
zip_entry_close($entry);
}
}
zip_close($zip);
?>
Zip_open ()
Wird verwendet, um eine ZIP -Datei zu öffnen und einen Ressourcenhandle zurückzugeben.
ZIP_READ () und ZIP_ENTRY_NAME ())
Lesen Sie die Einträge im komprimierten Paket eins nach eins nach zip_read () und verwenden Sie dann zip_entry_name (), um den relativen Pfad zum Eintrag zu erhalten.
DirName () Verzeichnispfad extrahieren
Unabhängig davon, ob es sich um eine Datei oder ein Verzeichnis handelt, verwenden Sie DirName (), um den Pfadteil zu extrahieren und dann zu überprüfen, ob das Verzeichnis vorliegt.
Datei_exists () wird in Verbindung mit MKDIR () verwendet
Datei_Exists () wird verwendet, um festzustellen, ob das Verzeichnis bereits vorhanden ist.
mkdir () verwendet den dritten Parameter, um das wahre Maß einzustellen, um mehrstufige Verzeichnisse rekursiv zu erstellen.
Dateiinhalt schreiben
Wenn der aktuelle Eintrag eine Datei ist, wird er geöffnet, gelesen und in den Zielweg geschrieben.
Angenommen, Sie haben ein komprimiertes Paket von http://m66.net/files/archive.zip heruntergeladen. Nach der Dekompression möchten Sie seine ursprüngliche Struktur beibehalten. Sie müssen $ Zippath nur ändern:
$zipPath = 'http://m66.net/files/archive.zip'; // Beachten:zip_open Die direkte Verwendung wird nicht unterstützt URL,Müssen zuerst in die Region herunterladen
Sie können Datei_Get_Contents () und File_put_Contents () verwenden, um die Datei lokal zu speichern:
$tempZip = 'temp_archive.zip';
file_put_contents($tempZip, file_get_contents('http://m66.net/files/archive.zip'));
Ersetzen Sie $ Zippath durch $ tempzip .
Durch Kombinieren von Zip_read () , File_exists () und MkDir () können wir die automatische Extraktion von ZIP-Dateiinhalten und Verzeichniserstellung effizient implementieren, ohne sich über Fehler zu sorgen, die durch die Nichtbelegung des Pfades verursacht werden. Diese Methode eignet sich besonders für die Dekomprimierung von Zip -Dateien mit komplexen Verzeichnisstrukturen und verbessert die Robustheit und Benutzerfreundlichkeit der Skript.