Tanto para comprimir como para descomprimir un archivo zip, podemos hacer uso de un par de librerías que vienen con la instalación de phpMyAdmin y que se encuentran en la carpeta libraries y son los archivos unzip.lib.php y zip.lib.php.
Un ejemplo de como comprimir varios archivos en un zip sería el siguiente:
PHP:
<?php
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");
$zip = new zipfile();
$filename = "1.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);
$zip->addFile($data,$filename);
$filename = "2.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);
$zip->addFile($data,$filename);
$zipcontents = $zip->file();
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"TheZip.zip\"");
header("Content-length: " . strlen($zipcontents) . "\n\n");
// output data
echo $zipcontents;
?>
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");
$zip = new zipfile();
$filename = "1.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);
$zip->addFile($data,$filename);
$filename = "2.jpg";
$fsize = @filesize($filename);
$fh = fopen($filename, 'rb', false);
$data = fread($fh, $fsize);
$zip->addFile($data,$filename);
$zipcontents = $zip->file();
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"TheZip.zip\"");
header("Content-length: " . strlen($zipcontents) . "\n\n");
// output data
echo $zipcontents;
?>
Mientras para descomprimir podemos ver el siguiente ejemplo:
PHP:
<?php
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");
$zip = new SimpleUnzip();
$filename = "myzippedfile.zip";
$entries = $zip->ReadFile($filename);
foreach ($entries as $entry){
$fh = fopen($entry->Name, 'w', false);
fwrite($fh,$entry->Data);
fclose($fh);
}
?>
ini_set("memory_limit","20M");
require_once("zip.lib.php");
require_once("unzip.lib.php");
$zip = new SimpleUnzip();
$filename = "myzippedfile.zip";
$entries = $zip->ReadFile($filename);
foreach ($entries as $entry){
$fh = fopen($entry->Name, 'w', false);
fwrite($fh,$entry->Data);
fclose($fh);
}
?>
El código es muy sencillo de entender con lo que sobran las explicaciones.

# tru3n0, may 26, 22:55:
buena aportación, me la apunto! :)
# Alejandro, jun 3, 22:23:
como seria el parametro para descomprimir en un directorio N
ejemplo que todo se descomprima dentro de tmp/
# Fran García, jun 4, 18:51:
Tan solo tendrías que añadir a la instrucción donde se abre el fichero en modo escritura (fopen) la ruta donde quieres escribir el fichero. Algo así:
fopen(”./tmp/”.$entry->Name,‘w’,false);
Eso sería todo.