Foros del Web » Programando para Internet » PHP »

Comprimir zip

Estas en el tema de Comprimir zip en el foro de PHP en Foros del Web. Hola, estoy usando una clase que encontré para comprimir zip. Querría que me comprimiera un directorio y todo su contenido, pero solo conseguí que me ...
  #1 (permalink)  
Antiguo 09/07/2011, 00:47
 
Fecha de Ingreso: noviembre-2010
Mensajes: 1.242
Antigüedad: 13 años, 5 meses
Puntos: 73
Comprimir zip

Hola, estoy usando una clase que encontré para comprimir zip.

Querría que me comprimiera un directorio y todo su contenido, pero solo conseguí que me comprimiese 1 a uno los archivos.

Código PHP:
Ver original
  1. class zipfile {  
  2.  
  3.     var $datasec = array();
  4.     var $ctrl_dir = array();
  5.     var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
  6.     var $old_offset = 0;  
  7.  
  8.     function add_dir($name) {  
  9.         $name = str_replace("\\", "/", $name);  
  10.  
  11.         $fr = "\x50\x4b\x03\x04";  
  12.         $fr .= "\x0a\x00";
  13.         $fr .= "\x00\x00";
  14.         $fr .= "\x00\x00";
  15.         $fr .= "\x00\x00\x00\x00";
  16.  
  17.         $fr .= pack("V",0);
  18.         $fr .= pack("V",0);
  19.         $fr .= pack("V",0);
  20.         $fr .= pack("v", strlen($name) );
  21.         $fr .= pack("v", 0 );
  22.         $fr .= $name;  
  23.         $fr .= pack("V",$crc);
  24.         $fr .= pack("V",$c_len);
  25.         $fr .= pack("V",$unc_len);
  26.  
  27.         $this -> datasec[] = $fr;  
  28.  
  29.         $new_offset = strlen(implode("", $this->datasec));  
  30.  
  31.         $cdrec = "\x50\x4b\x01\x02";  
  32.         $cdrec .="\x00\x00";
  33.         $cdrec .="\x0a\x00";
  34.         $cdrec .="\x00\x00";
  35.         $cdrec .="\x00\x00";
  36.         $cdrec .="\x00\x00\x00\x00";
  37.         $cdrec .= pack("V",0);
  38.         $cdrec .= pack("V",0);
  39.         $cdrec .= pack("V",0);
  40.         $cdrec .= pack("v", strlen($name) );
  41.         $cdrec .= pack("v", 0 );
  42.         $cdrec .= pack("v", 0 );
  43.         $cdrec .= pack("v", 0 );
  44.         $cdrec .= pack("v", 0 );
  45.         $ext = "\x00\x00\x10\x00";  
  46.         $ext = "\xff\xff\xff\xff";  
  47.         $cdrec .= pack("V", 16 );
  48.  
  49.         $cdrec .= pack("V", $this -> old_offset );
  50.         $this -> old_offset = $new_offset;  
  51.  
  52.         $cdrec .= $name;  
  53.         $this -> ctrl_dir[] = $cdrec;  
  54.     }  
  55.  
  56.  
  57.     function add_file($data, $name) {  
  58.         $name = str_replace("\\", "/", $name);  
  59.  
  60.         $fr = "\x50\x4b\x03\x04";  
  61.         $fr .= "\x14\x00";
  62.         $fr .= "\x00\x00";
  63.         $fr .= "\x08\x00";
  64.         $fr .= "\x00\x00\x00\x00";
  65.  
  66.         $unc_len = strlen($data);  
  67.         $crc = crc32($data);  
  68.         $zdata = gzcompress($data);  
  69.         $zdata = substr( substr($zdata, 0, strlen($zdata) - 4), 2);
  70.         $c_len = strlen($zdata);  
  71.         $fr .= pack("V",$crc);
  72.         $fr .= pack("V",$c_len);
  73.         $fr .= pack("V",$unc_len);
  74.         $fr .= pack("v", strlen($name) );
  75.         $fr .= pack("v", 0 );
  76.         $fr .= $name;  
  77.         $fr .= $zdata;  
  78.  
  79.         $fr .= pack("V",$crc);
  80.         $fr .= pack("V",$c_len);
  81.         $fr .= pack("V",$unc_len);
  82.  
  83.         $this -> datasec[] = $fr;  
  84.  
  85.         $new_offset = strlen(implode("", $this->datasec));  
  86.  
  87.         $cdrec = "\x50\x4b\x01\x02";  
  88.         $cdrec .="\x00\x00";
  89.         $cdrec .="\x14\x00";
  90.         $cdrec .="\x00\x00";
  91.         $cdrec .="\x08\x00";
  92.         $cdrec .="\x00\x00\x00\x00";
  93.         $cdrec .= pack("V",$crc);
  94.         $cdrec .= pack("V",$c_len);
  95.         $cdrec .= pack("V",$unc_len);
  96.         $cdrec .= pack("v", strlen($name) );
  97.         $cdrec .= pack("v", 0 );
  98.         $cdrec .= pack("v", 0 );
  99.         $cdrec .= pack("v", 0 );
  100.         $cdrec .= pack("v", 0 );
  101.         $cdrec .= pack("V", 32 );
  102.  
  103.         $cdrec .= pack("V", $this -> old_offset );
  104.         $this -> old_offset = $new_offset;  
  105.  
  106.         $cdrec .= $name;  
  107.         $this -> ctrl_dir[] = $cdrec;  
  108.     }  
  109.  
  110.     function file() {
  111.         $data = implode("", $this -> datasec);  
  112.         $ctrldir = implode("", $this -> ctrl_dir);  
  113.  
  114.         return    
  115.             $data.  
  116.             $ctrldir.  
  117.             $this -> eof_ctrl_dir.  
  118.             pack("v", sizeof($this -> ctrl_dir)).
  119.             pack("v", sizeof($this -> ctrl_dir)).
  120.             pack("V", strlen($ctrldir)).
  121.             pack("V", strlen($data)).
  122.             "\x00\x00";
  123.     }  
  124. }

¿Cómo puedo hacer para que comprima todo lo que hay en un directorio?
__________________
:)
  #2 (permalink)  
Antiguo 09/07/2011, 12:57
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Comprimir zip

Esta clase hace lo que tú quieres:
http://www.phpclasses.org/package/94...ip-bzip2-.html
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 09/07/2011, 13:08
marcofbb
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Comprimir zip

Yo uso este:
http://www.phpconcept.net/pclzip/user-guide

Etiquetas: comprimir, zip
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 02:22.