Hola, estoy mirando a ver como crear archivos zip con php. La idea es que pille una carpeta y la zipe con todo su contenido. Los ejemplos que encuentro se me van un poco de las manos. Muchas gracias.
1 Respuesta
Respuesta
1
1
Anónimo
Espero te sea de ayuda este codigo Guardar Como: createzip.php [Esto es la libreria] <? function createzip($struct,$namezip=0) { $ZipData = array(); $Dircont = array(); $DirFile = array(); $offseto = 0; while(list($file,$data)=each($struct)) { $file= str_replace("\\", "/", $file); $dir=explode("/",$file); for($i=0; $i<sizeof($dir); $i++)if($dir[$i]=="")unset($dir[$i]); $num=count($dir); //Total de niveles $ele=0; //Nivel actual $dirname=""; //Nombre archivo o directorio while(list($idx,$val)=each($dir)) { $ty=(++$ele)==$num?true:false; $ty=trim($data)!=""?$ty:false;//Compruebar si el ultimo elemento es directorio o archivo $dirname.=$val.($ty?"":"/"); if(isset($DirFile[$dirname]))continue; else $DirFile[$dirname]=true; $gzdata=""; if($ty) { $unziplen=strlen($data); $czip=crc32($data); $gzdata=gzcompress($data); $gzdata=substr(substr($gzdata,0,strlen($gzdata)-4),2); $cziplen=strlen($gzdata); } $ZipData[]="\x50\x4b\x03\x04".($ty?"\x14":"\x0a")."\x00\x00\x00".($ty?"\x08":"\x00")."\x00\x00\x00\x00\x00". pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0).pack("v",strlen($dirname)). pack("v",0).$dirname.$gzdata.pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0); $Dircont[]="\x50\x4b\x01\x02\x00\x00".($ty?"\x14":"\x0a")."\x00\x00\x00".($ty?"\x08":"\x00")."\x00\x00\x00\x00\x00". pack("V",$ty?$czip:0).pack("V",$ty?$cziplen:0).pack("V",$ty?$unziplen:0).pack("v",strlen($dirname)). pack("v", 0 ).pack("v",0).pack("v",0).pack("v",0).pack("V",$ty?32:16).pack("V",$offseto).$dirname; $offseto=strlen(implode("",$ZipData)); }//Fin While dir }//Fin While archivos $data = implode("",$ZipData); $cdir = implode("",$Dircont); $data=$data.$cdir."\x50\x4b\x05\x06\x00\x00\x00\x00".pack("v",sizeof($Dircont)).pack("v",sizeof($Dircont)).pack("V",strlen($cdir)).pack("V",strlen($data))."\x00\x00"; if($namezip)//Construir el archivo { if(($fp=fopen($namezip,"wb"))) { fwrite($fp,$data); fclose ($fp); return true; }else return false; }else return $data; } //$cont=array("leerme.txt"=>"Este es un archivo generado a ".date("Y-m-d H:i:s"), // "foto.png"=> file_get_contents("img/foto.png"), // "dir1/dir2/dir3/color.txt"=>"color" // ); //createzip($cont,"down/tmp/demozip.zip"); ?> Guardar Como:CrearZip.php [Ejemplo] <? 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("foto.jpg"), "dir1/dir2/dir3/color.txt"=>"color", "otrodir/demo"=>"" ); createzip($cont,"Demozip.zip") or die("Error: al construir el ZIP."); ?>