精华内容
下载资源
问答
  • 突然心血来潮想知道“想哭”是怎样解压资源中的加密Zip文件(密码:WNcry2o17) 分别在CreateFileA和CreateFileW处下断点,如下图(取了其中2个文件) 起始没啥高大上的方法,就是创建文件。...

    突然心血来潮想知道“想哭”是怎样解压资源中的加密Zip文件(密码:WNcry2o17)

    分别在CreateFileA和CreateFileW处下断点,如下图(取了其中2个文件)

    起始没啥高大上的方法,就是创建文件。

    展开全文
  • macOS 用户在使用Safari 下载ZIP 档时,会发现macOS 会自动将ZIP解压。有没有方法禁止Safari 自动将下载的文档解压呢?当然有的,需要的朋友快看过来吧! 为什么Safari 会自动解压下载档? 其实这是Safari 的内...

    macOS 用户在使用Safari 下载ZIP 档时,会发现macOS 会自动将ZIP 档解压。有没有方法禁止Safari 自动将下载的文档解压呢?当然有的,需要的朋友快看过来吧!

    为什么Safari 会自动解压下载档?

    其实这是Safari 的内建功能,当认为压缩档内的档案是安全便会自动解压。当中包括PDF、图像、声音档等等。

    解除自动解压方法

    1.选择Safari 浏览器的「偏好设定」。

    2.在「通用」下取消选取「下载后打开"安全的"档案」就可以了。

    经过上面的方法设置就可以禁止Safari 自动将下载的文档解压,是不是很简单,需要的朋友快去操作试试吧!

    展开全文
  • 怎样解决压缩目录嵌套问题呢? 在 zip.write(os.path.join(dirpath,file),file) 中的arcname 和file 想通的情况下不会嵌套。 代码如下 # -*-coding:utf-8 -*- import os import zipfile import shutil def zip...
    • python 中的zipfile 提供了这个方法

    • 但是在压缩的过程中出现了目录嵌套问题和压缩嵌套(压缩输出的目录是同一目录的情况下)

    • 怎样解决压缩目录嵌套问题呢?

    • 在 zip.write(os.path.join(dirpath,file),file) 中的arcname 和file 想通的情况下不会嵌套。

    • 代码如下

      # -*-coding:utf-8 -*-
      import os
      import zipfile
      import shutil
      
      def zipDir(dirpath,outfullname):
          """
          :param dirpath: 压缩文件目录
          :param outfullname: 输出临时文件目录
          :把文件压缩到当前目录
          """
          if os.path.exists(outfullname):
              os.remove(outFullname) # 判断存在的话就删除
          if os.path.exists(os.path.join(dirpath,os.path.split(outfullname)[-1])):
              os.remove(os.path.join(dirpath,os.path.split(outfullname)[-1]))
          zip = zipfile.ZipFile(outfullname,"a",zipfile.ZIP_DEFLATED)
          for file in os.listdir(dirpath):
              zip.write(os.path.join(dirpath,file),file) # 解决压缩目录嵌套问题
          zip.close()
          shutil.move(outfullname,dirpath) # 移动文件
      
      def unzipDir(path):
          """解压"""
          zip_file = zipfile.ZipFile(path)
          try:
              zip_file.extractall(os.path.split(path)[0]) # 解压到当前目录
          except Exception as e:
              raise e
      
      
    展开全文
  • 我从网上找的文件php在线解压zip压缩文件 文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢?? jy.php文件 1 <?php 2 header("content-Type: text/html; charset=utf-8"); 3 //验证密码 4 $...

    我从网上找的文件php在线解压zip压缩文件

    文件为jy.php可以直接执行,但是怎样将其加到CI框架中呢??

    jy.php文件

      1 <?php
      2 header("content-Type: text/html; charset=utf-8");
      3 //验证密码
      4 $password = "123456";
      5 ?>
      6 <html>
      7 <head>
      8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      9 <title>在线解压ZIP文件程序 V1.0</title>
     10 <style type="text/css">
     11 <!--
     12 body,td{
     13     font-size: 14px;
     14     color: #000000;
     15 }
     16 a {
     17     color: #000066;
     18     text-decoration: none;
     19 }
     20 a:hover {
     21     color: #FF6600;
     22     text-decoration: underline;
     23 }
     24 -->
     25 </style>
     26 </head>
     27 
     28 <body>
     29   <form name="myform" method="post" action="<?=$_SERVER[PHP_SELF];?>" enctype="multipart/form-data" onSubmit="return check_uploadObject(this);">
     30 <?
     31     if(!$_REQUEST["myaction"]):
     32 ?>
     33 
     34 <script language="javascript">
     35 function check_uploadObject(form){
     36     if(form.password.value==''){
     37         alert('请输入密码.');
     38         return false;
     39     }
     40     return true;
     41 }
     42 </script>
     43 
     44 <table width="100%" border="0" cellspacing="0" cellpadding="4">
     45     <tr>
     46       <td height="40" colspan="2" style="color:#FF9900"><p><font color="#FF0000">在线解压ZIP文件程序 V1.0</font></p>
     47       <p>使用方法:把zip文件通过FTP上传到本文件相同的目录下,选择zip文件;或直接点击“浏览...”上传zip文件。</p>
     48 <p>&nbsp;</p>
     49  </td>
     50     </tr>
     51     <tr>
     52       <td width="11%">选择ZIP文件: </td>
     53       <td width="89%"><select name="zipfile">
     54         <option value="" selected>- 请选择 -</option>
     55 <?
     56       $fdir = opendir('./');
     57     while($file=readdir($fdir)){
     58         if(!is_file($file)) continue;
     59         if(preg_match('/\.zip$/mis',$file)){
     60             echo "<option value='$file'>$file</option>\r\n";
     61         }
     62     }
     63 ?>
     64       </select></td>
     65     </tr>
     66     <tr>
     67       <td width="11%" nowrap>或上传文件: </td>
     68       <td width="89%"><input name="upfile" type="file" id="upfile" size="20"></td>
     69     </tr>
     70     <tr>
     71       <td>解压到目录: </td>
     72       <td><input name="todir" type="text" id="todir" value="" size="15"> 
     73       (留空为本目录,必须有写入权限)</td>
     74     </tr>
     75     <tr>
     76       <td>验证密码: </td>
     77       <td><input name="password" type="password" id="password" size="15"> 
     78         (源文件中设定的密码)</td>
     79     </tr>    
     80     <tr>
     81       <td><input name="myaction" type="hidden" id="myaction" value="dounzip"></td>
     82       <td><input type="submit" name="Submit" value=" 解 压 "></td>
     83     </tr>
     84   </table>
     85 
     86 <?
     87 
     88 elseif($_REQUEST["myaction"]=="dounzip"):
     89 
     90 
     91 class zip
     92 {
     93 
     94  var $total_files = 0;
     95  var $total_folders = 0; 
     96 
     97  function Extract ( $zn, $to, $index = Array(-1) )
     98  {
     99    $ok = 0; $zip = @fopen($zn,'rb');
    100    if(!$zip) return(-1);
    101    $cdir = $this->ReadCentralDir($zip,$zn);
    102    $pos_entry = $cdir['offset'];
    103 
    104    if(!is_array($index)){ $index = array($index);  }
    105    for($i=0; $index[$i];$i++){
    106            if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
    107         return(-1);
    108    }
    109    for ($i=0; $i<$cdir['entries']; $i++)
    110    {
    111      @fseek($zip, $pos_entry);
    112      $header = $this->ReadCentralFileHeaders($zip);
    113      $header['index'] = $i; $pos_entry = ftell($zip);
    114      @rewind($zip); fseek($zip, $header['offset']);
    115      if(in_array("-1",$index)||in_array($i,$index))
    116          $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
    117    }
    118    fclose($zip);
    119    return $stat;
    120  }
    121 
    122   function ReadFileHeader($zip)
    123   {
    124     $binary_data = fread($zip, 30);
    125     $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
    126 
    127     $header['filename'] = fread($zip, $data['filename_len']);
    128     if ($data['extra_len'] != 0) {
    129       $header['extra'] = fread($zip, $data['extra_len']);
    130     } else { $header['extra'] = ''; }
    131 
    132     $header['compression'] = $data['compression'];$header['size'] = $data['size'];
    133     $header['compressed_size'] = $data['compressed_size'];
    134     $header['crc'] = $data['crc']; $header['flag'] = $data['flag'];
    135     $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
    136 
    137     if ($header['mdate'] && $header['mtime']){
    138      $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
    139      $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
    140      $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
    141      $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
    142     }else{$header['mtime'] = time();}
    143 
    144     $header['stored_filename'] = $header['filename'];
    145     $header['status'] = "ok";
    146     return $header;
    147   }
    148 
    149  function ReadCentralFileHeaders($zip){
    150     $binary_data = fread($zip, 46);
    151     $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);
    152 
    153     if ($header['filename_len'] != 0)
    154       $header['filename'] = fread($zip,$header['filename_len']);
    155     else $header['filename'] = '';
    156 
    157     if ($header['extra_len'] != 0)
    158       $header['extra'] = fread($zip, $header['extra_len']);
    159     else $header['extra'] = '';
    160 
    161     if ($header['comment_len'] != 0)
    162       $header['comment'] = fread($zip, $header['comment_len']);
    163     else $header['comment'] = '';
    164 
    165     if ($header['mdate'] && $header['mtime'])
    166     {
    167       $hour = ($header['mtime'] & 0xF800) >> 11;
    168       $minute = ($header['mtime'] & 0x07E0) >> 5;
    169       $seconde = ($header['mtime'] & 0x001F)*2;
    170       $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
    171       $month = ($header['mdate'] & 0x01E0) >> 5;
    172       $day = $header['mdate'] & 0x001F;
    173       $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
    174     } else {
    175       $header['mtime'] = time();
    176     }
    177     $header['stored_filename'] = $header['filename'];
    178     $header['status'] = 'ok';
    179     if (substr($header['filename'], -1) == '/')
    180       $header['external'] = 0x41FF0010;
    181     return $header;
    182  }
    183 
    184  function ReadCentralDir($zip,$zip_name){
    185     $size = filesize($zip_name);
    186 
    187     if ($size < 277) $maximum_size = $size;
    188     else $maximum_size=277;
    189     
    190     @fseek($zip, $size-$maximum_size);
    191     $pos = ftell($zip); $bytes = 0x00000000;
    192     
    193     while ($pos < $size){
    194         $byte = @fread($zip, 1); $bytes=($bytes << 8) | ord($byte);
    195         if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506){ $pos++;break;} $pos++;
    196     }
    197     
    198     $fdata=fread($zip,18);
    199     
    200     $data=@unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',$fdata);
    201     
    202     if ($data['comment_size'] != 0) $centd['comment'] = fread($zip, $data['comment_size']);
    203     else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
    204     $centd['disk_entries'] = $data['disk_entries'];
    205     $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
    206     $centd['size'] = $data['size'];  $centd['disk'] = $data['disk'];
    207     return $centd;
    208   }
    209 
    210  function ExtractFile($header,$to,$zip){
    211     $header = $this->readfileheader($zip);
    212     
    213     if(substr($to,-1)!="/") $to.="/";
    214     if($to=='./') $to = '';    
    215     $pth = explode("/",$to.$header['filename']);
    216     $mydir = '';
    217     for($i=0;$i<count($pth)-1;$i++){
    218         if(!$pth[$i]) continue;
    219         $mydir .= $pth[$i]."/";
    220         if((!is_dir($mydir) && @mkdir($mydir,0777)) || (($mydir==$to.$header['filename'] || ($mydir==$to && $this->total_folders==0)) && is_dir($mydir)) ){
    221             @chmod($mydir,0777);
    222             $this->total_folders ++;
    223             echo "<input name='dfile[]' type='checkbox' value='$mydir' checked> <a href='$mydir' target='_blank'>目录: $mydir</a><br>";
    224         }
    225     }
    226     
    227     if(strrchr($header['filename'],'/')=='/') return;    
    228 
    229     if (!($header['external']==0x41FF0010)&&!($header['external']==16)){
    230         if ($header['compression']==0){
    231             $fp = @fopen($to.$header['filename'], 'wb');
    232             if(!$fp) return(-1);
    233             $size = $header['compressed_size'];
    234         
    235             while ($size != 0){
    236                 $read_size = ($size < 2048 ? $size : 2048);
    237                 $buffer = fread($zip, $read_size);
    238                 $binary_data = pack('a'.$read_size, $buffer);
    239                 @fwrite($fp, $binary_data, $read_size);
    240                 $size -= $read_size;
    241             }
    242             fclose($fp);
    243             touch($to.$header['filename'], $header['mtime']);
    244         }else{
    245             $fp = @fopen($to.$header['filename'].'.gz','wb');
    246             if(!$fp) return(-1);
    247             $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
    248             Chr(0x00), time(), Chr(0x00), Chr(3));
    249             
    250             fwrite($fp, $binary_data, 10);
    251             $size = $header['compressed_size'];
    252         
    253             while ($size != 0){
    254                 $read_size = ($size < 1024 ? $size : 1024);
    255                 $buffer = fread($zip, $read_size);
    256                 $binary_data = pack('a'.$read_size, $buffer);
    257                 @fwrite($fp, $binary_data, $read_size);
    258                 $size -= $read_size;
    259             }
    260         
    261             $binary_data = pack('VV', $header['crc'], $header['size']);
    262             fwrite($fp, $binary_data,8); fclose($fp);
    263     
    264             $gzp = @gzopen($to.$header['filename'].'.gz','rb') or die("Cette archive est compress閑");
    265             if(!$gzp) return(-2);
    266             $fp = @fopen($to.$header['filename'],'wb');
    267             if(!$fp) return(-1);
    268             $size = $header['size'];
    269         
    270             while ($size != 0){
    271                 $read_size = ($size < 2048 ? $size : 2048);
    272                 $buffer = gzread($gzp, $read_size);
    273                 $binary_data = pack('a'.$read_size, $buffer);
    274                 @fwrite($fp, $binary_data, $read_size);
    275                 $size -= $read_size;
    276             }
    277             fclose($fp); gzclose($gzp);
    278         
    279             touch($to.$header['filename'], $header['mtime']);
    280             @unlink($to.$header['filename'].'.gz');
    281             
    282         }
    283     }
    284     
    285     $this->total_files ++;
    286     echo "<input name='dfile[]' type='checkbox' value='$to$header[filename]' checked> <a href='$to$header[filename]' target='_blank'>文件: $to$header[filename]</a><br>";
    287 
    288     return true;
    289  }
    290 
    291 // end class
    292 }
    293 
    294     set_time_limit(0);
    295 
    296     if ($_POST['password'] != $password) die("输入的密码不正确,请重新输入。");
    297     if(!$_POST["todir"]) $_POST["todir"] = ".";
    298     $z = new Zip;
    299     $have_zip_file = 0;
    300     function start_unzip($tmp_name,$new_name,$checked){
    301         global $_POST,$z,$have_zip_file;
    302         $upfile = array("tmp_name"=>$tmp_name,"name"=>$new_name);
    303         if(is_file($upfile[tmp_name])){
    304             $have_zip_file = 1;
    305             echo "<br>正在解压: <input name='dfile[]' type='checkbox' value='$upfile[name]' ".($checked?"checked":"")."> $upfile[name]<br><br>";
    306             if(preg_match('/\.zip$/mis',$upfile[name])){
    307                 $result=$z->Extract($upfile[tmp_name],$_POST["todir"]);
    308                 if($result==-1){
    309                     echo "<br>文件 $upfile[name] 错误.<br>";
    310                 }
    311                 echo "<br>完成,共建立 $z->total_folders 个目录,$z->total_files 个文件.<br><br><br>";
    312             }else{
    313                 echo "<br>$upfile[name] 不是 zip 文件.<br><br>";            
    314             }
    315             if(realpath($upfile[name])!=realpath($upfile[tmp_name])){
    316                 @unlink($upfile[name]);
    317                 rename($upfile[tmp_name],$upfile[name]);
    318             }
    319         }
    320     }
    321     clearstatcache();
    322     
    323     start_unzip($_POST["zipfile"],$_POST["zipfile"],0);
    324     start_unzip($_FILES["upfile"][tmp_name],$_FILES["upfile"][name],1);
    325 
    326     if(!$have_zip_file){
    327         echo "<br>请选择或上传文件.<br>";
    328     }
    329 ?>
    330 <input name="password" type="hidden" id="password" value="<?=$_POST['password'];?>">
    331 <input name="myaction" type="hidden" id="myaction" value="dodelete">
    332 <input name="按钮" type="button" value="返回" onClick="window.location='<?=$_SERVER[PHP_SELF];?>';">
    333 
    334 <input type='button' value='反选' οnclick='selrev();'> <input type='submit' οnclick='return confirm("删除选定文件?");' value='删除选定'>
    335 
    336 <script language='javascript'>
    337 function selrev() {
    338     with(document.myform) {
    339         for(i=0;i<elements.length;i++) {
    340             thiselm = elements[i];
    341             if(thiselm.name.match(/dfile\[]/))    thiselm.checked = !thiselm.checked;
    342         }
    343     }
    344 }
    345 alert('完成.');
    346 </script>
    347 <?
    348 
    349 elseif($_REQUEST["myaction"]=="dodelete"):
    350     set_time_limit(0);
    351     if ($_POST['password'] != $password) die("输入的密码不正确,请重新输入。");
    352     
    353     $dfile = $_POST["dfile"]; 
    354     echo "正在删除文件...<br><br>";
    355     if(is_array($dfile)){
    356         for($i=count($dfile)-1;$i>=0;$i--){
    357             if(is_file($dfile[$i])){
    358                 if(@unlink($dfile[$i])){
    359                     echo "已删除文件: $dfile[$i]<br>";
    360                 }else{
    361                     echo "删除文件失败: $dfile[$i]<br>";
    362                 }
    363             }else{
    364                 if(@rmdir($dfile[$i])){
    365                     echo "已删除目录: $dfile[$i]<br>";
    366                 }else{
    367                     echo "删除目录失败: $dfile[$i]<br>";
    368                 }                
    369             }
    370             
    371         }
    372     }
    373     echo "<br>完成.<br><br><input type='button' value='返回' οnclick=\"window.location='$_SERVER[PHP_SELF]';\"><br><br>
    374          <script language='javascript'>('完成.');</script>";
    375 
    376 endif;
    377 
    378 ?>
    379   </form>
    380 </html>
    View Code

    CI框架中我们先建立显示页面

    views/informaction_zip.php

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     2        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3 
     4 <html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">
     5 <!--
     6  * Created on 2013-8-5
     7  *
     8  * To change the template for this generated file go to
     9  * Window - Preferences - PHPeclipse - PHP - Code Templates
    10 -->
    11  <head>
    12  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    13   <title> </title>
    14 <style type="text/css">
    15 <!--
    16 body,td{
    17     font-size: 14px;
    18     color: #000000;
    19 }
    20 a {
    21     color: #000066;
    22     text-decoration: none;
    23 }
    24 a:hover {
    25     color: #FF6600;
    26     text-decoration: underline;
    27 }
    28 -->
    29 </style>
    30 </head>
    31 
    32 <body>
    33   <form name="myform" method="post" action="<?= base_url() ?>index.php/admin/zip/zipUtil" enctype="multipart/form-data" onSubmit="return check_uploadObject(this);">
    34 </script>
    35 
    36 <table width="100%" border="0" cellspacing="0" cellpadding="4">
    37     <tr>
    38       <p>使用方法:直接点击“浏览...”上传zip文件,这里的文件只能是zip文件,zip文件和子文件以英文命名。</p>
    39 <p>&nbsp;</p>
    40  </td>
    41     </tr>
    42     <tr>
    43       <td width="11%" nowrap>上传文件: </td>
    44       <td width="89%"><input name="upfile" type="file" id="upfile" size="20"></td>
    45     </tr>
    46     <tr>
    47 
    48       <td><input name="todir" type="text" id="todir" style="display:none" value="pdf+images" size="15"></td>
    49     </tr>
    50 
    51     <tr>
    52       <td><input name="myaction" type="hidden" id="myaction" value="dounzip"></td>
    53       <td><input type="submit" name="Submit" value=" 解 压 "></td>
    54     </tr>
    55   </table>
    56 </form>
    57 
    58 
    59  </body>
    60 </html>
    View Code

    controllers/zip.php

     1 <?php
     2 
     3 
     4 /*
     5  * Created on 2013-7-7
     6  *
     7  * To change the template for this generated file go to
     8  * Window - Preferences - PHPeclipse - PHP - Code Templates
     9  */
    10 class Zip extends CI_Controller {
    11     //构造函数
    12     function __construct() {
    13         parent :: __construct();
    14         $this->load->helper('url');
    15         $this->load->model("m_zip");
    16         error_reporting(1);
    17     }
    18 
    19     //显示zip文件录入信息界面
    20     public function index() {
    21         $this->load->view('admin/subject/information_zip');
    22     }
    23     //处理zip信息界面
    24     public function zipUtil() {
    25         if (!$_POST["todir"])
    26             $_POST["todir"] = ".";
    27         clearstatcache();
    28 //        echo $_FILES["upfile"]["tmp_name"];
    29         $this->start_unzip($_FILES["upfile"]["tmp_name"], $_FILES["upfile"]["name"], 1);
    30     }
    31     function start_unzip($tmp_name, $new_name, $checked) {
    32         $have_zip_file = 0;
    33         $upfile = array (
    34             "tmp_name" => $tmp_name,
    35             "name" => $new_name
    36         );
    37         if (is_file($upfile["tmp_name"])) {
    38             $have_zip_file = 1;
    39             $z = $this->m_zip;
    40             echo "<br>正在解压: <input name='dfile[]' type='checkbox' value='$upfile[name]' " . ($checked ? "checked" : "") . "> $upfile[name]<br><br>";
    41             if (preg_match('/\.zip$/mis', $upfile["name"])) {
    42                 $result = $z->Extract($upfile["tmp_name"], $_POST["todir"]);
    43                 if ($result == -1) {
    44                     echo "<br>文件 $upfile[name] 错误.<br>";
    45                 }
    46                 echo "<br>完成,$z->total_files 个文件.<br><br><br>";
    47 
    48 
    49             } else {
    50                 echo "<br>$upfile[name] 不是 zip 文件.<br><br>";
    51             }
    52             if (realpath($upfile["name"]) != realpath($upfile["tmp_name"])) {
    53                 @ unlink($upfile["name"]);
    54                 rename($upfile["tmp_name"], $upfile["name"]);
    55                 unlink($upfile["name"]);
    56             }
    57         }
    58 
    59     }
    60 }
    61 ?>
    View Code

    models/m_zip.php

      1 <?php
      2 class m_zip extends CI_Model {
      3     var $total_files = 0;
      4     var $total_folders = 0;
      5 
      6     function Extract($zn, $to, $index = Array (
      7         -1
      8     )) {
      9         $ok = 0;
     10         $zip = @ fopen($zn, 'rb');
     11         if (!$zip)
     12             return (-1);
     13         $cdir = $this->ReadCentralDir($zip, $zn);
     14         $pos_entry = $cdir['offset'];
     15 
     16         if (!is_array($index)) {
     17             $index = array (
     18                 $index
     19             );
     20         }
     21         for ($i = 0; $index[$i]; $i++) {
     22             if (intval($index[$i]) != $index[$i] || $index[$i] > $cdir['entries'])
     23                 return (-1);
     24         }
     25         for ($i = 0; $i < $cdir['entries']; $i++) {
     26             @ fseek($zip, $pos_entry);
     27             $header = $this->ReadCentralFileHeaders($zip);
     28             $header['index'] = $i;
     29             $pos_entry = ftell($zip);
     30             @ rewind($zip);
     31             fseek($zip, $header['offset']);
     32             if (in_array("-1", $index) || in_array($i, $index))
     33                 $stat[$header['filename']] = $this->ExtractFile($header, $to, $zip);
     34         }
     35         fclose($zip);
     36         return $stat;
     37     }
     38 
     39     function ReadFileHeader($zip) {
     40         $binary_data = fread($zip, 30);
     41         $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
     42 
     43         $header['filename'] = fread($zip, $data['filename_len']);
     44         if ($data['extra_len'] != 0) {
     45             $header['extra'] = fread($zip, $data['extra_len']);
     46         } else {
     47             $header['extra'] = '';
     48         }
     49 
     50         $header['compression'] = $data['compression'];
     51         $header['size'] = $data['size'];
     52         $header['compressed_size'] = $data['compressed_size'];
     53         $header['crc'] = $data['crc'];
     54         $header['flag'] = $data['flag'];
     55         $header['mdate'] = $data['mdate'];
     56         $header['mtime'] = $data['mtime'];
     57 
     58         if ($header['mdate'] && $header['mtime']) {
     59             $hour = ($header['mtime'] & 0xF800) >> 11;
     60             $minute = ($header['mtime'] & 0x07E0) >> 5;
     61             $seconde = ($header['mtime'] & 0x001F) * 2;
     62             $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
     63             $month = ($header['mdate'] & 0x01E0) >> 5;
     64             $day = $header['mdate'] & 0x001F;
     65             $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
     66         } else {
     67             $header['mtime'] = time();
     68         }
     69 
     70         $header['stored_filename'] = $header['filename'];
     71         $header['status'] = "ok";
     72         return $header;
     73     }
     74 
     75     function ReadCentralFileHeaders($zip) {
     76         $binary_data = fread($zip, 46);
     77         $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);
     78 
     79         if ($header['filename_len'] != 0)
     80             $header['filename'] = fread($zip, $header['filename_len']);
     81         else
     82             $header['filename'] = '';
     83 
     84         if ($header['extra_len'] != 0)
     85             $header['extra'] = fread($zip, $header['extra_len']);
     86         else
     87             $header['extra'] = '';
     88 
     89         if ($header['comment_len'] != 0)
     90             $header['comment'] = fread($zip, $header['comment_len']);
     91         else
     92             $header['comment'] = '';
     93 
     94         if ($header['mdate'] && $header['mtime']) {
     95             $hour = ($header['mtime'] & 0xF800) >> 11;
     96             $minute = ($header['mtime'] & 0x07E0) >> 5;
     97             $seconde = ($header['mtime'] & 0x001F) * 2;
     98             $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
     99             $month = ($header['mdate'] & 0x01E0) >> 5;
    100             $day = $header['mdate'] & 0x001F;
    101             $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
    102         } else {
    103             $header['mtime'] = time();
    104         }
    105         $header['stored_filename'] = $header['filename'];
    106         $header['status'] = 'ok';
    107         if (substr($header['filename'], -1) == '/')
    108             $header['external'] = 0x41FF0010;
    109         return $header;
    110     }
    111 
    112     function ReadCentralDir($zip, $zip_name) {
    113         $size = filesize($zip_name);
    114 
    115         if ($size < 277)
    116             $maximum_size = $size;
    117         else
    118             $maximum_size = 277;
    119 
    120         @ fseek($zip, $size - $maximum_size);
    121         $pos = ftell($zip);
    122         $bytes = 0x00000000;
    123 
    124         while ($pos < $size) {
    125             $byte = @ fread($zip, 1);
    126             $bytes = ($bytes << 8) | ord($byte);
    127             if ($bytes == 0x504b0506 or $bytes == 0x2e706870504b0506) {
    128                 $pos++;
    129                 break;
    130             }
    131             $pos++;
    132         }
    133 
    134         $fdata = fread($zip, 18);
    135 
    136         $data = @ unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $fdata);
    137 
    138         if ($data['comment_size'] != 0)
    139             $centd['comment'] = fread($zip, $data['comment_size']);
    140         else
    141             $centd['comment'] = '';
    142         $centd['entries'] = $data['entries'];
    143         $centd['disk_entries'] = $data['disk_entries'];
    144         $centd['offset'] = $data['offset'];
    145         $centd['disk_start'] = $data['disk_start'];
    146         $centd['size'] = $data['size'];
    147         $centd['disk'] = $data['disk'];
    148         return $centd;
    149     }
    150 
    151     function ExtractFile($header, $to, $zip) {
    152         $header = $this->readfileheader($zip);
    153 
    154         if (substr($to, -1) != "/")
    155             $to .= "/";
    156         if ($to == './')
    157             $to = '';
    158         $pth = explode("/", $to . $header['filename']);
    159         $mydir = '';
    160         for ($i = 0; $i < count($pth) - 1; $i++) {
    161             if (!$pth[$i])
    162                 continue;
    163             $mydir .= $pth[$i] . "/";
    164             if ((!is_dir($mydir) && @ mkdir($mydir, 0777)) || (($mydir == $to . $header['filename'] || ($mydir == $to && $this->total_folders == 0)) && is_dir($mydir))) {
    165                 @ chmod($mydir, 0777);
    166                 $this->total_folders++;
    167                 echo "<input name='dfile[]' type='checkbox' value='$mydir' checked> <a href='$mydir' target='_blank'>目录: $mydir</a><br>";
    168             }
    169         }
    170 
    171         if (strrchr($header['filename'], '/') == '/')
    172             return;
    173 
    174         if (!($header['external'] == 0x41FF0010) && !($header['external'] == 16)) {
    175             if ($header['compression'] == 0) {
    176                 $fp = @ fopen($to . $header['filename'], 'wb');
    177                 if (!$fp)
    178                     return (-1);
    179                 $size = $header['compressed_size'];
    180 
    181                 while ($size != 0) {
    182                     $read_size = ($size < 2048 ? $size : 2048);
    183                     $buffer = fread($zip, $read_size);
    184                     $binary_data = pack('a' . $read_size, $buffer);
    185                     @ fwrite($fp, $binary_data, $read_size);
    186                     $size -= $read_size;
    187                 }
    188                 fclose($fp);
    189                 touch($to . $header['filename'], $header['mtime']);
    190             } else {
    191                 $fp = @ fopen($to . $header['filename'] . '.gz', 'wb');
    192                 if (!$fp)
    193                     return (-1);
    194                 $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']), Chr(0x00), time(), Chr(0x00), Chr(3));
    195 
    196                 fwrite($fp, $binary_data, 10);
    197                 $size = $header['compressed_size'];
    198 
    199                 while ($size != 0) {
    200                     $read_size = ($size < 1024 ? $size : 1024);
    201                     $buffer = fread($zip, $read_size);
    202                     $binary_data = pack('a' . $read_size, $buffer);
    203                     @ fwrite($fp, $binary_data, $read_size);
    204                     $size -= $read_size;
    205                 }
    206 
    207                 $binary_data = pack('VV', $header['crc'], $header['size']);
    208                 fwrite($fp, $binary_data, 8);
    209                 fclose($fp);
    210 
    211                 $gzp = @ gzopen($to . $header['filename'] . '.gz', 'rb') or die("Cette archive est compress閑");
    212                 if (!$gzp)
    213                     return (-2);
    214                 $fp = @ fopen($to . $header['filename'], 'wb');
    215                 if (!$fp)
    216                     return (-1);
    217                 $size = $header['size'];
    218 
    219                 while ($size != 0) {
    220                     $read_size = ($size < 2048 ? $size : 2048);
    221                     $buffer = gzread($gzp, $read_size);
    222                     $binary_data = pack('a' . $read_size, $buffer);
    223                     @ fwrite($fp, $binary_data, $read_size);
    224                     $size -= $read_size;
    225                 }
    226                 fclose($fp);
    227                 gzclose($gzp);
    228 
    229                 touch($to . $header['filename'], $header['mtime']);
    230                 @ unlink($to . $header['filename'] . '.gz');
    231 
    232             }
    233         }
    234 
    235         $this->total_files++;
    236         echo "<input name='dfile[]' type='checkbox' value='$to$header[filename]' checked> <a href='$to$header[filename]' target='_blank'>文件: $to$header[filename]</a><br>";
    237 
    238         return true;
    239     }
    240 
    241     // end class
    242 }
    243 ?>
    View Code

     

     

    转载于:https://www.cnblogs.com/wang3680/p/3237862.html

    展开全文
  • 想实现在linux下用c/c++把文件压缩加密的成zip文件,在windows 上能用普通的解压软件解密解压,zlib这个库好像不支持加密了
  • Windows下怎样解压.tar.xz文件

    万次阅读 2013-11-01 22:45:37
    Windows下怎样解压.tar.xz文件 首先,下载7-Zip软件,下载后鼠标定位到要解压的文件,点击鼠标右键》7-Zip》提取到“file.tar\”,解压为filename.tar文件夹; 打开file.tar文件夹,找到Windows下最常见的WinRAR...
  • ZIP文件安装(Win7):设置环境变量,MYSQL_HOME=ZIP解压所在目录,然后添加在path中;在cmd中输入mysqld -install安装成功之后,cmd输入net start MySQL启动服务即可。1、mysql安装之后默认root密码是空输入mysql -...
  •  这篇文章,讲述的是,怎样将上一篇文章中生成的压缩文件,进行解压的。也就是说,读取一个ZIP压缩文件,将里面一个被压缩的文件提取出来。  其实,根据压缩、解压,输入、输出 我们可以写出四个装饰器类,分别...
  • 一款可以实现文件解压和压缩小应用源码,该应用是实现了怎样利用第三方类库 ZipArchive 来解压和压缩.zip文件的,还可以实现了先从网络下载一个.zip文件下来,然后对它进行解压,最后可以对再进行压缩等功能,也基本...
  • 里面的目录都已经设置好了 应该怎样正确打开这个py文件呢? <p>1. 先解压 <p>2. 在vscode里打开.py文件 <p>3. run 请问对吗?设置好的目录能被正确查找到吗?</p>
  • 怎样将压缩文件上传到服务器上

    千次阅读 2019-09-29 20:24:29
    2,在upload服务器上解压zip。 3,在upload服务器上处理解压的文件(基本上都是jsonstring) 4,通过接口调用将jsonstring传入到接口中,进行数据库的操作 一、html <input id="discoverImg"...
  •  众所周知,ipa实际上就是一个zip文件,通过解压,可以在Payload目录下得到一个app文件,实际上这个app文件就是一个文件夹,当然windows下,用户很容易就知道这一点。在Mac下,用户需要将app更名。进入此目录后,...
  • 怎样从ipa中提取PNG文件(iPhoneGeek)

    千次阅读 2012-10-10 23:41:06
    众所周知,ipa实际上就是一个zip文件,通过解压,可以在Payload目录下得到一个app文件,实际上这个app文件就是一个文件夹,当然windows下,用户很容易就知道这一点。在Mac下,用户需要将app更名。进入此目录后,ipa...
  • Linux压缩解压命令

    2016-08-09 10:18:19
    (2)压缩命令在Linux系统中怎样使用。 2 压缩解压命令:gzip 命令名称:gzip 命令英文原意:GNU zip 命令所在路径:/bin/gzip 执行权限:所有用户 语法:gzip [文件] 功能描述:压缩文件 压缩后文件格式:...
  • ZIP文件安装: 设置环境变量,MYSQL_HOME=ZIP解压所在目录,然后添加在path中; 在cmd中输入mysqld -install 安装成功之后,cmd输入net start MySQL启动服务即可。 1、mysql安装之后默认root密码是空 输入mysql -u...
  • 如何用7-Zip解压一个兼容各式的文件? 答:在初始界面选中目标文件,单击{释放}按钮。 8.如何将7-Zip与系统关联? 怎样将7-zip在“右键菜单”中显示? 答:在初始界面,单击{环境} - {预置}的操作菜单。进入后可以...
  • 压缩当前文件夹下所有文件,压缩为a.zip。命令行的方法是怎样zip -r fileName.zip 文件夹名 tar tar命令可以用来压缩打包单文件、多个文件、单个目录、多个目录。 常用格式: 单个文件...
  • 怎样安装JMeter

    2017-09-01 22:32:52
    怎样安装JMeter: ...我的电脑是Win10_64位的,直接下载zip后缀的压缩包,然后解压,我安装的是3.1,官网上最新的是3.2: 解压到我的电脑: 在使用JMeter之前要修改一下配置文件jmeter.p
  • 怎样进行打开等操作答:(1)保存位置:第一硬盘最后一个分区:\~1\C_PAN.GHO(2)~1的优点:此文件夹在FAT分区下资源管器中完全隐藏即使打开"显示所有文件"也不可见, 在NTFS分区下可防止删除,以防止病毒的恶意行为或用户的...
  • 把下载好的安装包解压到当前文件夹,之后双击【toolsbox.exe】运行文件进行安装,打开的时候会出现安装框,依次开始安装,依照步骤点击下一步,并选择同意协议和软件安装位置即可。   点击【完成】按钮,王牌...
  • 怎样获取最新版本?□全新下载:批量解压(Extractio):http://files.cnblogs.com/unruledboy/Extractio.zip智能实验室-... 批量解压(Extractio)是用来批量解压压缩文件的工具。 详细信息,请访问 智能实验室-批...
  • 下载PHP5: http://cn2.php.net/distributions/php-5.2.6-Win32.zip 下载apache: ... 由于php是一个zip文件(非install版),安装较为简单,解压就行。把解压的 php5...
  •  qq空间访客提取器是一款绿色软件,解压后直接双击exe文件即可进入软件使用界面,如下图:    qq空间访客记录提取器(雄鹰)温馨提示:不存在可以提取所有访客记录的软件,如果有人声称可以提取全部QQ空间访客,...
  • 5、有没有解压软件? 6、是否是官网下载的最新版本? 7、是不是安装360防毒?有没有添加360信任区? 添加360信任区的方法如:http://www.wishdown.com/article/6145.html 8、为什么我在虚拟机中试用不了一键搬图...
  • Step1: 登录MYSQL 官网,下载对应系统的zip文件,并将文件解压到要安装的目录,如:D:\mysql-5.6.28-winx64 Step2: 在安装的目录下,新建my.ini文件,内容如下: [mysql] # 设置mysql客户端默认字符集 default-...
  • 怎样减小iOS APP 或者 静态库的体积

    千次阅读 2015-10-20 15:52:20
    把打包好的.ipa文件的后缀改为.zip解压。右键.appbundle 选择显示包内容。有些情况下,大一点的文件压缩后反而比小一点的文件压缩后的体积小,而我们真正关心的时候解压后的真实体积,所以一定要解压里面的资源...
  • 下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32。...解压zip 文件。得到例如以下目录和文件 STM32F10x_StdPeriph_Lib_V3.5.0\ _htmresc Libraries...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

怎样解压zip文件