PHP解压ZIP文件到指定文件夹的方法


Posted in PHP onNovember 17, 2016

本文实例讲述了PHP解压ZIP文件到指定文件夹的方法。分享给大家供大家参考,具体如下:

/**
 * 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 __construct(){
    //init code here...
    header("content-type:text/html;charset=utf8");
  }
  /**
  * 解压文件到指定目录
  *
  * @param  string  zip压缩文件的路径
  * @param  string  解压文件的目的路径
  * @param  boolean 是否以压缩文件的名字创建目标文件夹
  * @param  boolean 是否重写已经存在的文件
  *
  * @return boolean 返回成功 或失败
  */
  public function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true){
  if ($zip = zip_open($src_file)){
    if ($zip){
      $splitter = ($create_zip_name_dir === true) ? "." : "/";
      if($dest_dir === false){
        $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/";
      }
      // 如果不存在 创建目标解压目录
      $this->create_dirs($dest_dir);
       // 对每个文件进行解压
       while ($zip_entry = zip_read($zip)){
          // 文件不在根目录
          $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/");
          if ($pos_last_slash !== false){
            // 创建目录 在末尾带 /
            $this->create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1));
          }
          // 打开包
          if (zip_entry_open($zip,$zip_entry,"r")){
            // 文件名保存在磁盘上
            $file_name = $dest_dir.zip_entry_name($zip_entry);
            // 检查文件是否需要重写
            if ($overwrite === true || $overwrite === false && !is_file($file_name)){
              // 读取压缩文件的内容
              $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
              @file_put_contents($file_name, $fstream);
              // 设置权限
              chmod($file_name, 0777);
              echo "save: ".$file_name."<br />";
            }
            // 关闭入口
            zip_entry_close($zip_entry);
          }
        }
        // 关闭压缩包
        zip_close($zip);
      }
    }else{
      return false;
    }
    return true;
  }
  /**
  * 创建目录
  */
  public function create_dirs($path){
   if (!is_dir($path)){
     $directory_path = "";
     $directories = explode("/",$path);
     array_pop($directories);
     foreach($directories as $directory){
       $directory_path .= $directory."/";
       if (!is_dir($directory_path)){
         mkdir($directory_path);
         chmod($directory_path, 0777);
       }
     }
   }
  }
}
/*
 using:
 $z = new Unzip();
 $z->unzip("./bootstrap-3.3.4.zip",'./unzipres/', true, false);
*/

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP数据库操作面向对象的优点
Oct 09 PHP
php adodb操作mysql数据库
Mar 19 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php程序内部post数据的方法
Mar 31 PHP
php实现zip文件解压操作
Nov 03 PHP
PHP连接MYSQL数据库实例代码
Jan 20 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
PHP生成腾讯云COS接口需要的请求签名
May 20 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 PHP
PHP版单点登陆实现方案的实例
Nov 17 #PHP
php实现URL加密解密的方法
Nov 17 #PHP
PHP读取zip文件的方法示例
Nov 17 #PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 #PHP
php arsort 数组降序排序详细介绍
Nov 17 #PHP
php array_values 返回数组的值实例详解
Nov 17 #PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 #PHP
You might like
提升PHP执行速度全攻略(下)
2006/10/09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
Python中zfill()方法的使用教程
2015/05/20 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python matlab库简单用法讲解
2020/12/31 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
初中生三年学习生活的自我评价
2013/11/03 职场文书
安全生产实施方案
2014/02/23 职场文书
端午节活动策划方案
2014/03/09 职场文书
三字经教学反思
2014/04/26 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
同意离婚答辩状
2015/05/22 职场文书