Heim > Backend-Entwicklung > PHP-Tutorial > Wie komprimiere ich ein Verzeichnis in PHP rekursiv?

Wie komprimiere ich ein Verzeichnis in PHP rekursiv?

DDD
Freigeben: 2024-12-11 03:20:10
Original
984 Leute haben es durchsucht

How to Recursively Zip a Directory in PHP?

Wie man ein Verzeichnis in PHP [rekursiv] komprimiert

Das Ziel besteht darin, ein Verzeichnis, einschließlich aller Unterverzeichnisse und Dateien, effektiv zu komprimieren. in PHP.

Ansatz mit der PHP-Zip-Klasse

Sie kann dazu die PHP-Zip-Klasse verwenden. Der bereitgestellte Code bietet einen grundlegenden Ansatz, funktioniert jedoch nur mit einzelnen Dateien, nicht mit Verzeichnissen.

Arbeitscode

Um diese Herausforderung zu bewältigen, betrachten Sie den folgenden Code:

function Zip($source, $destination)
{
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }

    $source = str_replace('\', '/', realpath($source));

    if (is_dir($source) === true)
    {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file)
        {
            $file = str_replace('\', '/', $file);

            // Ignore "." and ".." folders
            if( in_array(substr($file, strrpos($file, '/')+1), array('.', '..')) )
                continue;

            $file = realpath($file);

            if (is_dir($file) === true)
            {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            }
            else if (is_file($file) === true)
            {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    }
    else if (is_file($source) === true)
    {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}
Nach dem Login kopieren

Verwendung:

Rufen Sie die Zip-Funktion wie gezeigt auf hier:

Zip('/folder/to/compress/', './compressed.zip');
Nach dem Login kopieren

Dieser Code durchläuft rekursiv das angegebene Quellverzeichnis und seine Unterverzeichnisse und fügt Dateien und leere Verzeichnisse zum Zip-Archiv hinzu. Der Betrieb ist sowohl mit Windows- als auch mit Linux-Plattformen kompatibel.

Das obige ist der detaillierte Inhalt vonWie komprimiere ich ein Verzeichnis in PHP rekursiv?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage