Foros del Web » Programando para Internet » PHP »

comprimir archivos

Estas en el tema de comprimir archivos en el foro de PHP en Foros del Web. Hola.tengo un problema que me urge. Alguien tiene algun codigo que funcione para comprimir ficheros o carpetas? He probado varios y todos dan problemas, si ...
  #1 (permalink)  
Antiguo 01/09/2006, 13:02
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
comprimir archivos

Hola.tengo un problema que me urge.
Alguien tiene algun codigo que funcione para comprimir ficheros o carpetas?
He probado varios y todos dan problemas, si me decis de alguno que hayais probado os lo agradezco.

Saludos, gracias
  #2 (permalink)  
Antiguo 01/09/2006, 13:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pero de todos los códigos que has probado .. que problemas tienes?

De que sirve que te diga "este lo he usado yo y me funciona"? . .para que pruebes uno más? .. Lo que tienes que hacer es decidirte por un código en concreto .. el que más te guste o veas que lo que hace se acomode más a lo que necistas, centrar la pregunta con el código que te decidas y exponer claramente los "problemas" que tengas: mensajes de error de PHP .. o de cualquier otro tipo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 02/09/2006, 14:20
 
Fecha de Ingreso: febrero-2006
Mensajes: 297
Antigüedad: 18 años, 1 mes
Puntos: 1
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))
$filestr_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...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:50.