Maison > développement back-end > tutoriel php > Comment compresser récursivement un répertoire en PHP ?

Comment compresser récursivement un répertoire en PHP ?

DDD
Libérer: 2024-12-11 03:20:10
original
984 Les gens l'ont consulté

How to Recursively Zip a Directory in PHP?

Comment [Récursivement] Zipper un répertoire en PHP

Le but est de compresser efficacement un répertoire, y compris tous ses sous-répertoires et fichiers, en PHP.

Approche utilisant PHP Zip Class

Vous pouvez utilisez la classe PHP Zip pour y parvenir. Le code fourni offre une approche de base, mais il ne fonctionne qu'avec des fichiers individuels, pas avec des répertoires.

Code de travail

Pour relever ce défi, considérez le code suivant :

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();
}
Copier après la connexion

Utilisation :

Invoquez la fonction Zip comme indiqué ici :

Zip('/folder/to/compress/', './compressed.zip');
Copier après la connexion

Ce code parcourt de manière récursive le répertoire source spécifié et ses sous-répertoires, ajoutant des fichiers et des répertoires vides à l'archive zip. Son fonctionnement est compatible avec les plateformes Windows et Linux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal