Aktueller Standort: Startseite> Neueste Artikel> So erstellen Sie die Zielordnerstruktur rekursiv und implementieren Sie die Dekompression der Datei mithilfe der Funktion von PHP in kombiniert mit Scandir () -Funktion?

So erstellen Sie die Zielordnerstruktur rekursiv und implementieren Sie die Dekompression der Datei mithilfe der Funktion von PHP in kombiniert mit Scandir () -Funktion?

M66 2025-06-15

Bei der Verarbeitung von Zip -komprimierten Dateien in PHP kann die Funktion zip_read () uns helfen, den Inhalt im komprimierten Paket einzeln zu lesen. Mit der Funktion scandir () für rekursive Ordnervorgänge können wir eine Funktion der automatischen Dekomprimierung von Zip -Dateien auf der Serverseite einfach implementieren und die Verzeichnisstruktur beibehalten. In diesem Artikel wird detailliert vorgestellt, wie solche Skripte durch diese beiden Funktionen erstellt werden.

1. Umweltvorbereitung

Stellen Sie sicher, dass Ihre PHP -Umgebung eine Zip -Erweiterung aktiviert hat. Wenn es nicht aktiviert ist, können Sie die Php.ini -Datei bearbeiten, die folgende Konfigurationslinie und die Konfiguration finden:

 extension=zip

Starten Sie dann Ihren Webserver neu.

2. Grundlegende Ideen

  1. Öffnen Sie die ZIP -Datei;

  2. Durch jeden Eintrag in den Reißverschluss iterieren;

  3. Stellen Sie fest, ob ein Eintrag ein Verzeichnis oder eine Datei ist.

  4. Verwenden Sie Scandir () , um Verzeichnisstrukturen mit benutzerdefinierten Funktionen rekursiv zu erstellen.

  5. Schreiben Sie Dateien in ZIP auf den Zielweg.

A. Code -Implementierung

 <?php

function createDirRecursive($path) {
    if (!is_dir($path)) {
        mkdir($path, 0777, true);
    }
}

function unzipWithStructure($zipFilePath, $destination) {
    $zip = zip_open($zipFilePath);

    if (is_resource($zip)) {
        while ($zip_entry = zip_read($zip)) {
            $entryName = zip_entry_name($zip_entry);
            $fullPath = $destination . '/' . $entryName;

            // Wenn es ein Verzeichnis ist,Erstellen
            if (substr($entryName, -1) === '/') {
                createDirRecursive($fullPath);
            } else {
                // Stellen Sie sicher, dass das Verzeichnis, in dem die Datei existiert
                $dirPath = dirname($fullPath);
                createDirRecursive($dirPath);

                if (zip_entry_open($zip, $zip_entry)) {
                    $fileContent = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
                    file_put_contents($fullPath, $fileContent);
                    zip_entry_close($zip_entry);
                }
            }
        }
        zip_close($zip);
    } else {
        echo "Nicht öffnen könnenZIPdokumentieren: $zipFilePath";
    }
}

// Beispiel für die Nutzung
$zipPath = '/var/www/html/uploads/sample.zip';
$extractTo = '/var/www/html/extracted';

// Rufen Sie die Funktion an, um zu dekomprimieren
unzipWithStructure($zipPath, $extractTo);
?>

4. Verzeichnistraversal und Überprüfung

Verwenden Sie Scandir (), um zu überprüfen, ob die Zielverzeichnisstruktur korrekt erstellt wird. Zum Beispiel:

 function listAllFiles($dir) {
    $files = scandir($dir);
    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;
        $path = $dir . '/' . $file;
        if (is_dir($path)) {
            echo "Inhaltsverzeichnis: $path\n";
            listAllFiles($path);
        } else {
            echo "dokumentieren: $path\n";
        }
    }
}

listAllFiles('/var/www/html/extracted');

Nachdem Sie den oben genannten Code ausgeführt haben, können Sie alle dekomprimierten Dateien und Ordner für eine einfache Debugging und Überprüfung ausgeben.

5. Dinge zu beachten

  • Alle Pfade sollten absolute Pfade verwenden, um Berechtigungen oder Pfadfehler zu vermeiden.

  • Achten Sie in einer Produktionsumgebung auf die Quelle der ZIP -Datei, um das Verzeichnis -Durchgangsangriff zu verhindern (z. B. enthält ZIP ../../ );

  • Der Pfad kann in Kombination mit RealPath () normalisiert werden;

  • Wenn die Datei groß ist, wird empfohlen, das Streaming -Lesen zu verwenden, um den Speicherüberlauf zu verhindern.

6. Anwendungsszenarien

Dieses Skript eignet sich zum Hochladen von komprimierten Dateien und zum automatischen Dekomprimieren. Wenn der Benutzer beispielsweise eine ZIP-Datei mit einer Mehrschichtverzeichnisstruktur auf m66.net/upload hochlädt, kann der Hintergrund die vollständige Struktur im Verzeichnis m66.net/storage direkt durch das obige Skript wiederherstellen und den Inhalt weiter verarbeiten, z. B. das Generieren von Thumbnails nach Viruss oder das Erstellen von Sicherungen.

Auf diese Weise kann der Workflow des Inhalts -Uploads und die Dateiinitialisierung stark vereinfacht und die Entwicklungseffizienz verbessert werden.