utilizo createzip, para lo que tengo que incluir el siguiente código:
Código PHP:
<?
/* Autor: Martin R. Mondragon Sotelo
e-mail: [email protected]
*/
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[]="x50x4bx03x04".($ty?"x14":"x0a")."x00x00x00".($ty?"x08":"x00")."x00x00x00x00x00".
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[]="x50x4bx01x02x00x00".($ty?"x14":"x0a")."x00x00x00".($ty?"x08":"x00")."x00x00x00x00x00".
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."x50x4bx05x06x00x00x00x00".pack("v",sizeof($Dircont)).pack("v",sizeof($Dircont)).pack("V",strlen($cdir)).pack("V",strlen($data))."x00x00";
if($namezip)//Construir el archivo
{ if(($fp=fopen($namezip,"wb")))
{ fwrite($fp,$data);
fclose ($fp);
return true;
}else return false;
}else return $data;
}
?>
creo que mi problema es que no sé como poner los ficheros que quiero comprimir. Los tengo dentro de una carpeta llamada ficheros dentro de la carpeta donde esta el código a ejecutar. Son dos ficheros cuyos nombres estan en las variables $fichero1 y $fichero2
Código PHP:
$cont=array("ficheros/$fichero1.txt"=>"", "ficheros/$fichero2.txt"=>"");
$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=ficheros.zip");
echo $data;
No se si lo escribo bien, pero no me trata el fichero como si fuese un txt, sino que me crea una carpeta con el nombre del fichero (incluyendo txt) pero la carpeta esta vacia y no existe ningun txt. Yo creo que lo escribo mal pero he intentado otras formas y nada. Ademas cuando intento escribir el segundo parámetro, por ejemplo esto:
("ficheros/$fichero1.txt"=>"$fichero1", "ficheros/$fichero2.txt"=>"$fichero2");
me da un error.
Escribi esta pregunta pero me digeron que pruebe con otros códigos y que no me coma la cabeza. El problema es que no me va bien ninguno y creo que es porque no escribo bien la ruta del fichero o que el nombre no hay que ponerlo asi. No encuentro solucion. Si me hechan una mano...