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();
//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();
//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();
//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();
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();
Tenéis una clase de ejemplo para manejar zips en mi repositorio: ejemplo zip