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&amp;MYSQL服务器配置说明
Oct 09 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
php中strtotime函数用法详解
Nov 15 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
PHP文件缓存类示例分享
Jan 30 PHP
Thinkphp无限级分类代码
Nov 11 PHP
apache php mysql开发环境安装教程
Jul 28 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
Smarty模板语法详解
Jul 20 PHP
PHP容器类的两种实现方式示例
Jul 24 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设计模式 Strategy(策略模式)
2011/06/26 PHP
php实现斐波那契数列的简单写法
2014/07/19 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
JavaScript 常用函数
2009/12/30 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
JS数组方法push()、pop()用法实例分析
2020/01/18 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
KMP算法精解及其Python版的代码示例
2016/06/01 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
园长自我鉴定
2013/10/06 职场文书
2013年研究生毕业感言
2014/02/06 职场文书
研修第一天随笔感言
2014/02/15 职场文书
学习经验交流会主持词
2014/04/01 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
擅自离岗检讨书
2014/09/12 职场文书
公民代理授权委托书
2014/09/24 职场文书
小学庆六一主持词
2015/06/30 职场文书
证婚人致辞精选
2015/07/28 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python