加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP 解压 ZIP 文件到指定文件夹

发布时间:2020-05-30 20:22:00 所属栏目:PHP 来源:互联网
导读:本类实现参考 php manual 评论[php] view plain copy/*** function: 解压zip 格式的文件* author:friker* date:2015-15-14* reference:http://php.net/manual/zh/ref.zip.php* all rights reserved:wujiangwei123@126.com*/class Unzip{public function __c

<div class="cnblogs_code">

[php] view plain <span style="color: #008080;">copy
<span style="color: #008000;">/<span style="color: #008000;">

  • function: 解压zip 格式的文件
  • author:friker
  • date:2015-15-14
  • reference:http://php.net/manual/zh/ref.zip.php
  • all rights reserved:wujiangwei123@126.com
    <span style="color: #008000;">*/

<span style="color: #0000ff;">class<span style="color: #000000;"> Unzip{

<span style="color: #0000ff;">public <span style="color: #0000ff;">function<span style="color: #000000;"> __construct(){
<span style="color: #008000;">//<span style="color: #008000;">init code here...
<span style="color: #008080;">header("content-type:text/html;charset=utf8"<span style="color: #000000;">);
}

<span style="color: #008000;">/<span style="color: #008000;">

  • 解压文件到指定目录
  • @param string zip压缩文件的路径
  • @param string 解压文件的目的路径
  • @param boolean 是否以压缩文件的名字创建目标文件夹
  • @param boolean 是否重写已经存在的文件
  • @return boolean 返回成功 或失败
    <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">function unzip(<span style="color: #800080;">$src_file,<span style="color: #800080;">$dest_dir=<span style="color: #0000ff;">false,<span style="color: #800080;">$create_zip_name_dir=<span style="color: #0000ff;">true,<span style="color: #800080;">$overwrite=<span style="color: #0000ff;">true<span style="color: #000000;">){
</span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #800080;"&gt;$zip</span> = zip_open(<span style="color: #800080;"&gt;$src_file</span><span style="color: #000000;"&gt;)){  
    </span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #800080;"&gt;$zip</span><span style="color: #000000;"&gt;){  
        </span><span style="color: #800080;"&gt;$splitter</span> = (<span style="color: #800080;"&gt;$create_zip_name_dir</span> === <span style="color: #0000ff;"&gt;true</span>) ? "." : "/"<span style="color: #000000;"&gt;;  
        </span><span style="color: #0000ff;"&gt;if</span>(<span style="color: #800080;"&gt;$dest_dir</span> === <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;){  
            </span><span style="color: #800080;"&gt;$dest_dir</span> = <span style="color: #008080;"&gt;substr</span>(<span style="color: #800080;"&gt;$src_file</span>,<span style="color: #008080;"&gt;strrpos</span>(<span style="color: #800080;"&gt;$src_file</span>,<span style="color: #800080;"&gt;$splitter</span>))."/"<span style="color: #000000;"&gt;;  
        }  

        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 如果不存在 创建目标解压目录  </span>
        <span style="color: #800080;"&gt;$this</span>->create_dirs(<span style="color: #800080;"&gt;$dest_dir</span><span style="color: #000000;"&gt;);  

         </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 对每个文件进行解压  </span>
         <span style="color: #0000ff;"&gt;while</span> (<span style="color: #800080;"&gt;$zip_entry</span> = zip_read(<span style="color: #800080;"&gt;$zip</span><span style="color: #000000;"&gt;)){  
                </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 文件不在根目录  </span>
                <span style="color: #800080;"&gt;$pos_last_slash</span> = <span style="color: #008080;"&gt;strrpos</span>(zip_entry_name(<span style="color: #800080;"&gt;$zip_entry</span>),"/"<span style="color: #000000;"&gt;);  
                </span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #800080;"&gt;$pos_last_slash</span> !== <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;){  
                    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 创建目录 在末尾带 /  </span>
                    <span style="color: #800080;"&gt;$this</span>->create_dirs(<span style="color: #800080;"&gt;$dest_dir</span>.<span style="color: #008080;"&gt;substr</span>(zip_entry_name(<span style="color: #800080;"&gt;$zip_entry</span>),<span style="color: #800080;"&gt;$pos_last_slash</span>+1<span style="color: #000000;"&gt;));  
                }  

                </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 打开包  </span>
                <span style="color: #0000ff;"&gt;if</span> (zip_entry_open(<span style="color: #800080;"&gt;$zip</span>,<span style="color: #800080;"&gt;$zip_entry</span>,"r"<span style="color: #000000;"&gt;)){  

                    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 文件名保存在磁盘上  </span>
                    <span style="color: #800080;"&gt;$file_name</span> = <span style="color: #800080;"&gt;$dest_dir</span>.zip_entry_name(<span style="color: #800080;"&gt;$zip_entry</span><span style="color: #000000;"&gt;);  

                    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 检查文件是否需要重写  </span>
                    <span style="color: #0000ff;"&gt;if</span> (<span style="color: #800080;"&gt;$overwrite</span> === <span style="color: #0000ff;"&gt;true</span> || <span style="color: #800080;"&gt;$overwrite</span> === <span style="color: #0000ff;"&gt;false</span> &amp;&amp; !<span style="color: #008080;"&gt;is_file</span>(<span style="color: #800080;"&gt;$file_name</span><span style="color: #000000;"&gt;)){  
                        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 读取压缩文件的内容  </span>
                        <span style="color: #800080;"&gt;$fstream</span> = zip_entry_read(<span style="color: #800080;"&gt;$zip_entry</span>,zip_entry_filesize(<span style="color: #800080;"&gt;$zip_entry</span><span style="color: #000000;"&gt;));  

                        @</span><span style="color: #008080;"&gt;file_put_contents</span>(<span style="color: #800080;"&gt;$file_name</span>,<span style="color: #800080;"&gt;$fstream</span><span style="color: #000000;"&gt;);  
                        </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 设置权限  </span>
                        <span style="color: #008080;"&gt;chmod</span>(<span style="color: #800080;"&gt;$file_name</span>,0777<span style="color: #000000;"&gt;);  
                        </span><span style="color: #0000ff;"&gt;echo</span> "save: ".<span style="color: #800080;"&gt;$file_name</span>."<br />"<span style="color: #000000;"&gt;;  
                    }  

                    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 关闭入口  </span>
                    zip_entry_close(<span style="color: #800080;"&gt;$zip_entry</span><span style="color: #000000;"&gt;);  
                }  
            }  
            </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 关闭压缩包  </span>
            zip_close(<span style="color: #800080;"&gt;$zip</span><span style="color: #000000;"&gt;);  
        }  
    }</span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt;{  
        </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;;  
    }  
    </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;;  
}  

</span><span style="color: #008000;"&gt;/*</span><span style="color: #008000;"&gt;* 
* 创建目录 
</span><span style="color: #008000;"&gt;*/</span>  
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;function</span> create_dirs(<span style="color: #800080;"&gt;$path</span><span style="color: #000000;"&gt;){  
  </span><span style="color: #0000ff;"&gt;if</span> (!<span style="color: #008080;"&gt;is_dir</span>(<span style="color: #800080;"&gt;$path</span><span style="color: #000000;"&gt;)){  
      </span><span style="color: #800080;"&gt;$directory_path</span> = ""<span style="color: #000000;"&gt;;  
      </span><span style="color: #800080;"&gt;$directories</span> = <span style="color: #008080;"&gt;explode</span>("/",<span style="color: #800080;"&gt;$path</span><span style="color: #000000;"&gt;);  
      </span><span style="color: #008080;"&gt;array_pop</span>(<span style="color: #800080;"&gt;$directories</span><span style="color: #000000;"&gt;);  

      </span><span style="color: #0000ff;"&gt;foreach</span>(<span style="color: #800080;"&gt;$directories</span> <span style="color: #0000ff;"&gt;as</span> <span style="color: #800080;"&gt;$directory</span><span style="color: #000000;"&gt;){  
          </span><span style="color: #800080;"&gt;$directory_path</span> .= <span style="color: #800080;"&gt;$directory</span>."/"<span style="color: #000000;"&gt;;  
          </span><span style="color: #0000ff;"&gt;if</span> (!<span style="color: #008080;"&gt;is_dir</span>(<span style="color: #800080;"&gt;$directory_path</span><span style="color: #000000;"&gt;)){  
              </span><span style="color: #008080;"&gt;mkdir</span>(<span style="color: #800080;"&gt;$directory_path</span><span style="color: #000000;"&gt;);  
              </span><span style="color: #008080;"&gt;chmod</span>(<span style="color: #800080;"&gt;$directory_path</span>,0777<span style="color: #000000;"&gt;);  
          }  
      }  
  }  
}  

}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读