真正的ZIP文件操作类(php)

2019-04-11 01:21:43于海丽

 }

 function add_dir($name) 
 { 
   $name = str_replace("", "/", $name); 
   $fr = "x50x4bx03x04x0ax00x00x00x00x00x00x00x00x00"; 

   $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); 
   $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0); 
   $this -> datasec[] = $fr;

   $new_offset = strlen(implode("", $this->datasec)); 

   $cdrec = "x50x4bx01x02x00x00x0ax00x00x00x00x00x00x00x00x00"; 
   $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) ); 
   $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 ); 
   $ext = "xffxffxffxff"; 
   $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name; 

   $this -> ctrl_dir[] = $cdrec; 
   $this -> old_offset = $new_offset; 
   $this -> dirs[] = $name;
 }

 function add_File($data, $name, $compact = 1)
 {
   $name     = str_replace('', '/', $name);
   $dtime    = dechex($this->DosTime());

   $hexdtime = 'x' . $dtime[6] . $dtime[7].'x'.$dtime[4] . $dtime[5]
     . 'x' . $dtime[2] . $dtime[3].'x'.$dtime[0].$dtime[1];
   eval('$hexdtime = "' . $hexdtime . '";');

   if($compact)
   $fr = "x50x4bx03x04x14x00x00x00x08x00".$hexdtime;
   else $fr = "x50x4bx03x04x0ax00x00x00x00x00".$hexdtime;
   $unc_len = strlen($data); $crc = crc32($data);

   if($compact){
     $zdata = gzcompress($data); $c_len = strlen($zdata);
     $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
   }else{
     $zdata = $data;
   }
   $c_len=strlen($zdata);
   $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
   $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
相关文章 大家在看