Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/07/2011, 00:47
luisgzafra
 
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?
__________________
:)