Los archivos ZIP son formatos comprimidos que contienen uno o varios archivos que están comprimidos o almacenados.
Php cuenta con una extensión para manejo de archivos ZIP que es de solo lectura:
www.php.net/manual/es/ref.zip.php. No es necesaria tenerla instalada.
Requerimientos: Tener habilitada la extensión: Funciones de Compresión Zlib
www.php.net/manual/es/ref.zlib.php.
Descargar el código que vamos utilizar como librería:
http://www.mygnet.com/it/descargas/codigos/crear_archivos_zip.889.zip Listo solo hay que descomprimir el código fuente y llamarlo desde donde lo vamos a utilizar:
<?
include("createzip.php");
//Nuestro código
//..
?>
El código fuente
createzip.php tiene una función con el mismo nombre y la sintaxis es la siguiente:
string|bolean createzip(array contenido,[string archivo]) contenido: Es un arreglo que contiene la estructura de ficheros y directorio a comprimir.
archivo: Nombre de la ruta y archivo zip a general si no crea el archivo devuelve FALSE de los contrario TRUE. Si no se especifica este parámetro la funcion devolverá una cadena comprimida.
Ejemplo 1-
Generar un zip en un archivo:
<?
include("createzip.php");
$cont=array("leerme.txt"=>"Este es un archivo generado a ".date("Y-m-d H:i:s"),
"foto.jpg"=> file_get_contents("img/foto.jpg"),
"dir1/dir2/dir3/color.txt"=>"color",
"otrodir/demo"=>""
);
createzip($cont,"tmp/demozip.zip") or die("Error: al construir el ZIP.");
?>
Este ejemplo genera un zip de nombre:
demozip.zip en la ruta
tmp/Al abrir el zip tendremos el siguiente resultado:
Ejemplo 2-
Generar un zip en una cadena para descarga: <?
include("createzip.php");
$cont=array("leerme.txt"=>"Este es un archivo generado a ".date("Y-m-d H:i:s"),
"foto.jpg"=> file_get_contents("img/foto.jpg"),
"dir1/dir2/dir3/color.txt"=>"color",
"otrodir/demo"=>""
);
$data=createzip($cont);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: " . strlen($data));
header("Content-Disposition: attachment; filename=demozip.zip");
echo $data;
?>
Este Segundo ejemplo genera el zip en una cadena y forza la descarga con el nombre de
demozip.zip
Ejemplo 3-
Generar en zip un directorio:<?
include("createzip.php");
//Esta funcion recursiva para generar la estructura de un directorio en
//un arreglo
function fun_dir($dir,&$A,$path=0)
{ $d = dir($dir);
$path=$path?$path:$dir;
while($df=$d->read())
{ if($df=="." || $df=="..")continue;
if(is_file($d->path.$df))
{ $A[str_replace($path,"",$d->path.$df)]=file_get_contents($d->path.$df);
}
else
{ $A[str_replace($path,"",$d->path.$df)."/"]="";
fun_dir($d->path.$df."/",$A,$path);
}
} $d->close();
}
$cont=array();
fun_dir("img/",$cont);
$cont["generado.txt"]="Zip generado".date("Y-m-d H:i:s");
$data=createzip($cont);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Description: File Transfer");
header("Content-Type: application/force-download");
header("Content-Length: " . strlen($data));
header("Content-Disposition: attachment; filename=demozip.zip");
echo $data;
?>
Resultado será:
De esta forma podemos generar respaldos de todo el sitio o una parte del sitio en archivo ZIP.