Crear un archivo .ZIP dinámicamente con PHP

Esta entrada pretende mostrar cómo crear un archivo .ZIP de forma muy sencilla con PHP.

Con esta función fácilmente podemos crear un fichero .ZIP. Podemos incluir tantos ficheros como queramos dentro, con su respetiva ruta; así como muchas otras opciones que podemos echar un vistazo en la página de ZipArchive de PHP.

Vamos a por el código:

<?php
      /* creates a compressed zip file */
      function create_zip($files = array(),$destination = '',$overwrite = false) {
       //if the zip file already exists and overwrite is false, return false;
       if(file_exists($destination) && !$overwrite) { return false; }
       //vars
       $valid_files = array();
       //if files were passed in...
       if(is_array($files)) {
        //cycle through each file
        foreach($files as $file) {
         //make sure the file exists
         if(file_exists($file)) {
          $valid_files[] = $file;
         }
        }
       }
       //if we have good files...
       if(count($valid_files)) {
        //create the archive
        $zip = new ZipArchive();
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
         return false;
        }
        //add the files
        foreach($valid_files as $file) {
         $zip->addFile($file);
        }
        //debug
        //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
        
        //close the zip -- done!
        $zip->close();
        
        //check to make sure the file exists
        return file_exists($destination);
       }
       else
       {
        return false;
       }
      }
      ?>

Para informarle de los archivos a incluir utilizaremos un array de strings donde cada uno será la ruta hacia cada fichero, y los incluiremos uno a uno con array_push.

Y ahora un ejemplo de uso:

<?php
$files_to_zip = array();
array_push($files_to_zip, [PATHNAME OF THE FILE TO ZIP]);
$result = create_zip($files_to_zip,[PATHNAME WHERE WE WANT TO SAVE THE ZIP]);
?>

Una vez hacemos esto, mediante la variable $result obtenemos true si todo ha salido correctamente o, por el contrario, false si ha ocurrido algún error. Fácilmente podemos comprobar con un simple if…else y mostrar lo que necesitemos en cada caso.

<?php
if ($result){
echo 'El archivo se ha generado correctamente';
}else echo 'Ha fallado la generación del fichero .ZIP';
?>
Crear un archivo .ZIP dinámicamente con PHP Clic para tuitear
No votes yet.
Please wait...

Deja un comentario

marchurtos
A %d blogueros les gusta esto: