免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1839 | 回复: 4
打印 上一主题 下一主题

解压zip遇到问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-30 15:23 |只看该作者 |倒序浏览
$zippath=realpath("test.zip";
$zip = zip_open($zippath);

时提示Fatal error: Call to undefined function: zip_open() in C:\Program Files\Apache Group\Apache2\htdocs\test\unzip.php on line 4

可是我的php.ini里已经把
extension=php_zip.dll前的;去掉了
并且在php/dll和php/extensions下都有php_zip.dll,是什么原因?

论坛徽章:
0
2 [报告]
发表于 2003-12-31 11:58 |只看该作者

解压zip遇到问题

extension_dir 设置了吗?

论坛徽章:
0
3 [报告]
发表于 2004-03-16 13:56 |只看该作者

解压zip遇到问题

linux下的。zip文件怎么解压啊????

论坛徽章:
0
4 [报告]
发表于 2004-03-16 14:32 |只看该作者

解压zip遇到问题

[quote]原帖由 "xiaodi553"]linux下的。zip文件怎么解压啊????[/quote 发表:

怎么不能解压?应该可以的!
  1. <?

  2. // Created by bouchon
  3. // http://dev.maxg.info

  4. // Need help ? http://forum.maxg.info

  5. class zip
  6. {

  7. var $datasec, $ctrl_dir = array();
  8. var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
  9. var $old_offset = 0; var $dirs = Array(".");

  10. function get_List($zip_name)
  11. {
  12.    $zip = @fopen($zip_name, 'rb');
  13.    if(!$zip) return(0);
  14.    $centd = $this->;ReadCentralDir($zip,$zip_name);

  15.     @rewind($zip);
  16.     @fseek($zip, $centd['offset']);

  17.    for ($i=0; $i<$centd['entries']; $i++)
  18.    {
  19.     $header = $this->;ReadCentralFileHeaders($zip);
  20.     $header['index'] = $i;$info['filename'] = $header['filename'];
  21.     $info['stored_filename'] = $header['stored_filename'];
  22.     $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
  23.     $info['crc'] = strtoupper(dechex( $header['crc'] ));
  24.     $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
  25.     $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
  26.     $info['index'] = $header['index'];$info['status'] = $header['status'];
  27.     $ret[]=$info; unset($header);
  28.    }
  29.   return $ret;
  30. }

  31. function Add($files,$compact)
  32. {
  33.   if(!is_array($files[0])) $files=Array($files);

  34.   for($i=0;$files[$i];$i++){
  35.     $fn = $files[$i];
  36.     if(!in_Array(dirname($fn[0]),$this->;dirs))
  37.      $this->;add_Dir(dirname($fn[0]));
  38.     if(basename($fn[0]))
  39.      $ret[basename($fn[0])]=$this->;add_File($fn[1],$fn[0],$compact);
  40.   }
  41.   return $ret;
  42. }

  43. function get_file()
  44. {
  45.    $data = implode('', $this ->; datasec);
  46.    $ctrldir = implode('', $this ->; ctrl_dir);

  47.    return $data . $ctrldir . $this ->; eof_ctrl_dir .
  48.     pack('v', sizeof($this ->; ctrl_dir)).pack('v', sizeof($this ->; ctrl_dir)).
  49.     pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
  50. }

  51. function add_dir($name)
  52. {
  53.    $name = str_replace("\\", "/", $name);
  54.    $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";

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

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

  59.    $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
  60.    $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
  61.    $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
  62.    $ext = "\xff\xff\xff\xff";
  63.    $cdrec .= pack("V", 16 ).pack("V", $this ->; old_offset ).$name;

  64.    $this ->; ctrl_dir[] = $cdrec;
  65.    $this ->; old_offset = $new_offset;
  66.    $this ->; dirs[] = $name;
  67. }

  68. function add_File($data, $name, $compact = 1)
  69. {
  70.    $name     = str_replace('\\', '/', $name);
  71.    $dtime    = dechex($this->;DosTime());

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

  75.    if($compact)
  76.    $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
  77.    else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
  78.    $unc_len = strlen($data); $crc = crc32($data);

  79.    if($compact){
  80.      $zdata = gzcompress($data); $c_len = strlen($zdata);
  81.      $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
  82.    }else{
  83.      $zdata = $data;
  84.    }
  85.    $c_len=strlen($zdata);
  86.    $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
  87.    $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;

  88.    $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);

  89.    $this ->; datasec[] = $fr;
  90.    $new_offset        = strlen(implode('', $this->;datasec));
  91.    if($compact)
  92.         $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
  93.    else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
  94.    $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
  95.    $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
  96.    $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
  97.    $cdrec .= pack('V', $this ->; old_offset );

  98.    $this ->; old_offset = $new_offset;
  99.    $cdrec .= $name;
  100.    $this ->; ctrl_dir[] = $cdrec;
  101.    return true;
  102. }

  103. function DosTime() {
  104.    $timearray = getdate();
  105.    if ($timearray['year'] < 1980) {
  106.      $timearray['year'] = 1980; $timearray['mon'] = 1;
  107.      $timearray['mday'] = 1; $timearray['hours'] = 0;
  108.      $timearray['minutes'] = 0; $timearray['seconds'] = 0;
  109.    }
  110.    return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) |     ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
  111.     ($timearray['minutes'] << 5) | ($timearray['seconds'] >;>; 1);
  112. }

  113. function Extract ( $zn, $to, $index = Array(-1) )
  114. {
  115.    $ok = 0; $zip = @fopen($zn,'rb');
  116.    if(!$zip) return(-1);
  117.    $cdir = $this->;ReadCentralDir($zip,$zn);
  118.    $pos_entry = $cdir['offset'];

  119.    if(!is_array($index)){ $index = array($index);  }
  120.    for($i=0; $index[$i];$i++){
  121.      if(intval($index[$i])!=$index[$i]||$index[$i]>;$cdir['entries'])
  122.       return(-1);
  123.    }

  124.    for ($i=0; $i<$cdir['entries']; $i++)
  125.    {
  126.      @fseek($zip, $pos_entry);
  127.      $header = $this->;ReadCentralFileHeaders($zip);
  128.      $header['index'] = $i; $pos_entry = ftell($zip);
  129.      @rewind($zip); fseek($zip, $header['offset']);
  130.      if(in_array("-1",$index)||in_array($i,$index))
  131.       $stat[$header['filename']]=$this->;ExtractFile($header, $to, $zip);
  132.       
  133.    }
  134.    fclose($zip);
  135.    return $stat;
  136. }

  137.   function ReadFileHeader($zip)
  138.   {
  139.     $binary_data = fread($zip, 30);
  140.     $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);

  141.     $header['filename'] = fread($zip, $data['filename_len']);
  142.     if ($data['extra_len'] != 0) {
  143.       $header['extra'] = fread($zip, $data['extra_len']);
  144.     } else { $header['extra'] = ''; }

  145.     $header['compression'] = $data['compression'];$header['size'] = $data['size'];
  146.     $header['compressed_size'] = $data['compressed_size'];
  147.     $header['crc'] = $data['crc']; $header['flag'] = $data['flag'];
  148.     $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];

  149.     if ($header['mdate'] && $header['mtime']){
  150.      $hour=($header['mtime']&0xF800)>;>;11;$minute=($header['mtime']&0x07E0)>;>;5;
  151.      $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>;>;9)+1980;
  152.      $month=($header['mdate']&0x01E0)>;>;5;$day=$header['mdate']&0x001F;
  153.      $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
  154.     }else{$header['mtime'] = time();}

  155.     $header['stored_filename'] = $header['filename'];
  156.     $header['status'] = "ok";
  157.     return $header;
  158.   }

  159. function ReadCentralFileHeaders($zip){
  160.     $binary_data = fread($zip, 46);
  161.     $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);

  162.     if ($header['filename_len'] != 0)
  163.       $header['filename'] = fread($zip,$header['filename_len']);
  164.     else $header['filename'] = '';

  165.     if ($header['extra_len'] != 0)
  166.       $header['extra'] = fread($zip, $header['extra_len']);
  167.     else $header['extra'] = '';

  168.     if ($header['comment_len'] != 0)
  169.       $header['comment'] = fread($zip, $header['comment_len']);
  170.     else $header['comment'] = '';

  171.     if ($header['mdate'] && $header['mtime'])
  172.     {
  173.       $hour = ($header['mtime'] & 0xF800) >;>; 11;
  174.       $minute = ($header['mtime'] & 0x07E0) >;>; 5;
  175.       $seconde = ($header['mtime'] & 0x001F)*2;
  176.       $year = (($header['mdate'] & 0xFE00) >;>; 9) + 1980;
  177.       $month = ($header['mdate'] & 0x01E0) >;>; 5;
  178.       $day = $header['mdate'] & 0x001F;
  179.       $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
  180.     } else {
  181.       $header['mtime'] = time();
  182.     }
  183.     $header['stored_filename'] = $header['filename'];
  184.     $header['status'] = 'ok';
  185.     if (substr($header['filename'], -1) == '/')
  186.       $header['external'] = 0x41FF0010;
  187.     return $header;
  188. }

  189. function ReadCentralDir($zip,$zip_name)
  190. {
  191.   $size = filesize($zip_name);
  192.   if ($size < 277) $maximum_size = $size;
  193.   else $maximum_size=277;

  194.   @fseek($zip, $size-$maximum_size);
  195.   $pos = ftell($zip); $bytes = 0x00000000;

  196.   while ($pos < $size)
  197.   {
  198.     $byte = @fread($zip, 1); $bytes=($bytes << 8) | Ord($byte);
  199.     if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
  200.   }

  201. $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
  202.         fread($zip, 18));

  203.   if ($data['comment_size'] != 0)
  204.     $centd['comment'] = fread($zip, $data['comment_size']);
  205.     else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
  206.   $centd['disk_entries'] = $data['disk_entries'];
  207.   $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
  208.   $centd['size'] = $data['size'];  $centd['disk'] = $data['disk'];
  209.   return $centd;
  210. }

  211. function ExtractFile($header,$to,$zip)
  212. {
  213.    $header = $this->;readfileheader($zip);

  214.    if(substr($to,-1)!="/") $to.="/";
  215.    if(!@is_dir($to)) @mkdir($to,0777);

  216.    $pth = explode("/",dirname($header['filename']));
  217.    for($i=0;isset($pth[$i]);$i++){
  218.      if(!$pth[$i]) continue;
  219.      if(!is_dir($to.$pth[$i])) @mkdir($to.$pth[$i],0777);
  220.    }
  221.   if (!($header['external']==0x41FF0010)&&!($header['external']==16))
  222.   {
  223.    if ($header['compression']==0)
  224.    {
  225.     $fp = @fopen($to.$header['filename'], 'wb');
  226.     if(!$fp) return(-1);
  227.     $size = $header['compressed_size'];

  228.     while ($size != 0)
  229.     {
  230.       $read_size = ($size < 2048 ? $size : 2048);
  231.       $buffer = fread($zip, $read_size);
  232.       $binary_data = pack('a'.$read_size, $buffer);
  233.       @fwrite($fp, $binary_data, $read_size);
  234.       $size -= $read_size;
  235.     }
  236.     fclose($fp);
  237.     touch($to.$header['filename'], $header['mtime']);

  238.   }else{
  239.    $fp = @fopen($to.$header['filename'].'.gz','wb');
  240.    if(!$fp) return(-1);
  241.    $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
  242.      Chr(0x00), time(), Chr(0x00), Chr(3));

  243.    fwrite($fp, $binary_data, 10);
  244.    $size = $header['compressed_size'];

  245.    while ($size != 0)
  246.    {
  247.      $read_size = ($size < 1024 ? $size : 1024);
  248.      $buffer = fread($zip, $read_size);
  249.      $binary_data = pack('a'.$read_size, $buffer);
  250.      @fwrite($fp, $binary_data, $read_size);
  251.      $size -= $read_size;
  252.    }

  253.    $binary_data = pack('VV', $header['crc'], $header['size']);
  254.    fwrite($fp, $binary_data,8); fclose($fp);

  255.    $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress閑");
  256.     if(!$gzp) return(-2);
  257.    $fp = @fopen($to.$header['filename'],'wb');
  258.    if(!$fp) return(-1);
  259.    $size = $header['size'];

  260.    while ($size != 0)
  261.    {
  262.      $read_size = ($size < 2048 ? $size : 2048);
  263.      $buffer = gzread($gzp, $read_size);
  264.      $binary_data = pack('a'.$read_size, $buffer);
  265.      @fwrite($fp, $binary_data, $read_size);
  266.      $size -= $read_size;
  267.    }
  268.    fclose($fp); gzclose($gzp);

  269.    touch($to.$header['filename'], $header['mtime']);
  270.    @unlink($to.$header['filename'].'.gz');

  271.   }}
  272.   return true;
  273. }
  274. }

  275. ?>;
复制代码
sports98 该用户已被删除
5 [报告]
发表于 2004-03-17 01:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP