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仿ZOL分页类代码
Oct 02 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
php实现购物车功能(下)
Jan 05 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
php的优点总结 php有哪些优点
Jul 19 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
基于PHP实现发微博动态代码实例
Dec 11 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP Reflection API详解
2015/05/12 PHP
php显示时间常用方法小结
2015/06/05 PHP
yii数据库的查询方法
2015/12/28 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
python实现中文输出的两种方法
2015/05/09 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
matplotlib给子图添加图例的方法
2018/08/03 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python实现朴素贝叶斯算法
2018/11/19 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
python中什么是面向对象
2020/06/11 Python
后勤人员自我鉴定
2013/10/20 职场文书
安全资料员岗位职责
2013/12/14 职场文书
上班早退检讨书
2014/01/09 职场文书
女方婚礼新郎答谢词
2014/01/11 职场文书
酒店值班经理的工作职责范本
2014/02/18 职场文书
开发房地产协议书
2014/09/14 职场文书
六一儿童节开幕词
2015/01/29 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers