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

Wie komprimiere ich ein Verzeichnis in PHP rekursiv?

DDD
DDDOriginal
2024-12-11 03:20:10966Durchsuche

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();
}

Verwendung:

Rufen Sie die Zip-Funktion wie gezeigt auf hier:

Zip('/folder/to/compress/', './compressed.zip');

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!

Stellungnahme:
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