|
<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;">if</span> (<span style="color: #800080;">$zip</span> = zip_open(<span style="color: #800080;">$src_file</span><span style="color: #000000;">)){
</span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$zip</span><span style="color: #000000;">){
</span><span style="color: #800080;">$splitter</span> = (<span style="color: #800080;">$create_zip_name_dir</span> === <span style="color: #0000ff;">true</span>) ? "." : "/"<span style="color: #000000;">;
</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$dest_dir</span> === <span style="color: #0000ff;">false</span><span style="color: #000000;">){
</span><span style="color: #800080;">$dest_dir</span> = <span style="color: #008080;">substr</span>(<span style="color: #800080;">$src_file</span>,<span style="color: #008080;">strrpos</span>(<span style="color: #800080;">$src_file</span>,<span style="color: #800080;">$splitter</span>))."/"<span style="color: #000000;">;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 如果不存在 创建目标解压目录 </span>
<span style="color: #800080;">$this</span>->create_dirs(<span style="color: #800080;">$dest_dir</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 对每个文件进行解压 </span>
<span style="color: #0000ff;">while</span> (<span style="color: #800080;">$zip_entry</span> = zip_read(<span style="color: #800080;">$zip</span><span style="color: #000000;">)){
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 文件不在根目录 </span>
<span style="color: #800080;">$pos_last_slash</span> = <span style="color: #008080;">strrpos</span>(zip_entry_name(<span style="color: #800080;">$zip_entry</span>),"/"<span style="color: #000000;">);
</span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$pos_last_slash</span> !== <span style="color: #0000ff;">false</span><span style="color: #000000;">){
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 创建目录 在末尾带 / </span>
<span style="color: #800080;">$this</span>->create_dirs(<span style="color: #800080;">$dest_dir</span>.<span style="color: #008080;">substr</span>(zip_entry_name(<span style="color: #800080;">$zip_entry</span>),<span style="color: #800080;">$pos_last_slash</span>+1<span style="color: #000000;">));
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 打开包 </span>
<span style="color: #0000ff;">if</span> (zip_entry_open(<span style="color: #800080;">$zip</span>,<span style="color: #800080;">$zip_entry</span>,"r"<span style="color: #000000;">)){
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 文件名保存在磁盘上 </span>
<span style="color: #800080;">$file_name</span> = <span style="color: #800080;">$dest_dir</span>.zip_entry_name(<span style="color: #800080;">$zip_entry</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 检查文件是否需要重写 </span>
<span style="color: #0000ff;">if</span> (<span style="color: #800080;">$overwrite</span> === <span style="color: #0000ff;">true</span> || <span style="color: #800080;">$overwrite</span> === <span style="color: #0000ff;">false</span> && !<span style="color: #008080;">is_file</span>(<span style="color: #800080;">$file_name</span><span style="color: #000000;">)){
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 读取压缩文件的内容 </span>
<span style="color: #800080;">$fstream</span> = zip_entry_read(<span style="color: #800080;">$zip_entry</span>,zip_entry_filesize(<span style="color: #800080;">$zip_entry</span><span style="color: #000000;">));
@</span><span style="color: #008080;">file_put_contents</span>(<span style="color: #800080;">$file_name</span>,<span style="color: #800080;">$fstream</span><span style="color: #000000;">);
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 设置权限 </span>
<span style="color: #008080;">chmod</span>(<span style="color: #800080;">$file_name</span>,0777<span style="color: #000000;">);
</span><span style="color: #0000ff;">echo</span> "save: ".<span style="color: #800080;">$file_name</span>."<br />"<span style="color: #000000;">;
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 关闭入口 </span>
zip_entry_close(<span style="color: #800080;">$zip_entry</span><span style="color: #000000;">);
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 关闭压缩包 </span>
zip_close(<span style="color: #800080;">$zip</span><span style="color: #000000;">);
}
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">false</span><span style="color: #000000;">;
}
</span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">true</span><span style="color: #000000;">;
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
* 创建目录
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> create_dirs(<span style="color: #800080;">$path</span><span style="color: #000000;">){
</span><span style="color: #0000ff;">if</span> (!<span style="color: #008080;">is_dir</span>(<span style="color: #800080;">$path</span><span style="color: #000000;">)){
</span><span style="color: #800080;">$directory_path</span> = ""<span style="color: #000000;">;
</span><span style="color: #800080;">$directories</span> = <span style="color: #008080;">explode</span>("/",<span style="color: #800080;">$path</span><span style="color: #000000;">);
</span><span style="color: #008080;">array_pop</span>(<span style="color: #800080;">$directories</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">foreach</span>(<span style="color: #800080;">$directories</span> <span style="color: #0000ff;">as</span> <span style="color: #800080;">$directory</span><span style="color: #000000;">){
</span><span style="color: #800080;">$directory_path</span> .= <span style="color: #800080;">$directory</span>."/"<span style="color: #000000;">;
</span><span style="color: #0000ff;">if</span> (!<span style="color: #008080;">is_dir</span>(<span style="color: #800080;">$directory_path</span><span style="color: #000000;">)){
</span><span style="color: #008080;">mkdir</span>(<span style="color: #800080;">$directory_path</span><span style="color: #000000;">);
</span><span style="color: #008080;">chmod</span>(<span style="color: #800080;">$directory_path</span>,0777<span style="color: #000000;">);
}
}
}
}
}
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|