Comprimir carpetas en PHP

De manera nativa PHP tiene una clase para comprimir archivos (ZipArchive). Esto es muy útil cuando queremos empaquetar unos cuantos archivos, porque cada archivo se va adjuntando de forma individual; lo interesante viene cuando tenemos que empaquetar toda una carpeta que a su vez puede tener mas carpetas dentro.

Para hacer esto tenemos que usar un par de funciones que nos permitirán hacer recursividad. Veamos como.

//Creamos el archivo
$zip = new \ZipArchive();

//abrimos el archivo y lo preparamos para agregarle archivos
$zip->open("nombreArchivo.zip", \ZipArchive::CREATE | \ZipArchive::OVERWRITE);

//indicamos cual es la carpeta que se quiere comprimir
$origen = realpath('public/files');

//Ahora usando funciones de recursividad vamos a explorar todo el directorio y a enlistar todos los archivos contenidos en la carpeta
$files = new \RecursiveIteratorIterator(
            new \RecursiveDirectoryIterator($origen),
            \RecursiveIteratorIterator::LEAVES_ONLY
);

//Ahora recorremos el arreglo con los nombres los archivos y carpetas y se adjuntan en el zip
foreach ($files as $name => $file)
{
   if (!$file->isDir())
   {
       $filePath = $file->getRealPath();
       $relativePath = substr($filePath, strlen($origen) + 1);

       $zip->addFile($filePath, $relativePath);
   }
}

//Se cierra el Zip
$zip->close();

Con el código anterior ya podemos comprimir muchos archivos a la vez.

Related Posts Plugin for WordPress, Blogger...

publicidad

Deja una respuesta

Tu dirección de correo electrónico no será publicada.