快速业务通道

PHP解压ZIP的一个类

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23
eader['comment'] = fread($zip, $header['comment_len']);

  else $header['comment'] = '';

  if ($header['mdate'] && $header['mtime'])

  {

  $hour = ($header['mtime'] & 0xF800) >> 11;

  $minute = ($header['mtime'] & 0x07E0) >> 5;

  $seconde = ($header['mtime'] & 0x001F)*2;

  $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;

  $month = ($header['mdate'] & 0x01E0) >> 5;

  $day = $header['mdate'] & 0x001F;

  $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);

  } else {

  $header['mtime'] = time();

  }

  $header['stored_filename'] = $header['filename'];

  $header['status'] = 'ok';

  if (substr($header['filename'], -1) == '/')

  $header['external'] = 0x41FF0010;

  return $header;

  }

  function ReadCentralDir($zip,$zip_name)

  {

  $size = filesize($zip_name);

  if ($size < 277) $maximum_size = $size;

  else $maximum_size=277;

  @fseek($zip, $size-$maximum_size);

  $pos = ftell($zip); $bytes = 0x00000000;

  while ($pos < $size)

  {

  $byte = @fread($zip, 1); $bytes=($bytes << 8) | Ord($byte);

  if ($bytes == 0x504b0506){ $pos++; break; } $pos++;

  }

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

  if ($data['comment_size'] != 0)

  $centd['comment'] = fread($zip, $data['comment_size']);

  else $centd['comment'] = ''; $centd['entries'] = $data['entries'];

  $centd['disk_entries'] = $data['disk_entries'];

  $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];

  $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];

  return $centd;

  }

  function ExtractFile($header,$to,$zip)

  {

  $header = $this->readfileheader($zip);

  if(substr($to,-1)!="/") $to.="/";

  if(!@is_dir($to)) @mkdir($to,0777);

  $pth = explode("/",dirname($header['filename']));

  for($i=0;isset($pth[$i]);$i++){

  if(!$pth[$i]) continue;$pthss.=$pth[$i]."/";

  if(!is_dir($to.$pthss)) @mkdir($to.$pthss,0777);

  }

  if (!($header['external']==0x41FF0010)&&!($header['external']==16))

  {

  if ($header['compression']==0)

  {

  $fp = @fopen($to.$header['filename'], 'wb');

  if(!$fp) return(-1);

  $size = $header['compressed_size'];

  while ($size != 0)

  {

  $read_size = ($size < 2048 ? $size : 2048);

  $buffer = fread($zip, $read_size);

  $binary_data = pack(&#

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号