Blog de Gonzalo

MANEJAR FICHEROS ZIP CON PHP

En muchos de lo proyectos en los que he tomado parte se han tenido que crear excels, copias de seguridad, etc... que ocupaban cierto espacio en disco y para evitar ocupar espacio innecesario comprimíamos los ficheros a zip conphp. En este post voy a explicar de forma sencilla manejar ficheros zip con php.
El módulo zip para php viene instalado normalmente pero no está de más comprobar que está instalando consultándolo con phpinfo.
Crear un fichero zip:


//Primero es necesario crearse un objeto zip
$zip = new ZipArchive('filename.zip');
//Añadir un fichero para comprimir
//$filename es la ruta del fichero a añadir.
//$name es el nombre del fichero dentro de la carpeta comprimida
$zip->addFile($fileName,$name);
$zip->close();
Comprimir una carpeta zip:

//Primero es necesario crear un objeto zip
$zip = new ZipArchive();
//Añadir un fichero para comprimir
//$filename es la ruta del fichero a añadir.
//$folder ruta de la carpeta a comprimir
$options = array('add_path' => "$folder", 'remove_all_path' => TRUE);
//*.* es el patrón para especificar que archivos añadir
$zip->addGlob("$folder*.*", GLOB_BRACE, $options);
$zip->close();
Descromprimir una carpeta zip:

//Primero es necesario crear un objeto zip
$zip = new ZipArchive();
$zip->open($zipnmae,ZipArchive::CREATE);
//$extractPath y nombre carpeta donde se descomprimirá el fichero.
$zip->extractTo($extractPath);
$zip->close();
Comprimir con contraseña:

//Primero es necesario crearse un objeto zip
$zip = new ZipArchive();
//Añadir un fichero para comprimir
//$filename es la ruta del fichero a añadir.
//$name es el nombre del fichero dentro de la carpeta comprimida
$zip->addFile($fileName,$name);
$zip->setEncryptionName(basename($fileName), ZipArchive::EM_AES_256, $password);
$zip->close();
En este caso si se van a comprimir varios archvios con clave es conveniente añadir la misma clave a todos los ficheros para que sea más fácil descomprimirlos.
Para comprimir un directorio con contraseña sería:

//Primero es necesario crearse un objeto zip
$zip = new ZipArchive();
//Añadir un fichero para comprimir
//$filename es la ruta del fichero a añadir.
//$folder ruta de la carpeta a comprimir
//password contraseña que se aplicará a todos los ficheros
//*.* es el patrón para especificar que archivos añadir
$options = array('add_path' => "$folder", 'remove_all_path' => TRUE,'enc_method'=>ZipArchive::EM_AES_256,'enc_password'=>$password);
$zip->addGlob("$folder*.*", GLOB_BRACE, $options);
$zip->close();

Descromprimir una carpeta zip con contraseña:

//Primero es necesario crear un objeto zip
$zip = new ZipArchive();
$zip->open($zipnmae,ZipArchive::CREATE);
//$extractPath y nombre carpeta donde se descomprimirá el fichero.
$zip->setPassword($password)
$zip->extractTo($extractPath);
$zip->close();
Si no tenéis claro el uso de blob en php os recomiendo leer este post: Recorrer directorios en php
Tenéis una clase de ejemplo para manejar zips en mi repositorio: ejemplo zip

Compartir en twitter