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 生成WML页面方法详解
Aug 09 PHP
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
May 19 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
使用array mutisort 实现按某字段对数据排序
Jun 18 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
利用switch语句进行多选一判断的实例代码
Nov 14 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
浅谈laravel中的关联查询with的问题
Oct 10 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
我的论坛源代码(十)
2006/10/09 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
js中遍历对象的属性和值的方法
2016/07/27 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
JS变量及其作用域
2017/03/29 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
Python 时间处理datetime实例
2008/09/06 Python
python脚本设置系统时间的两种方法
2016/02/21 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
如何利用python查找电脑文件
2018/04/27 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
TensorFlow实现批量归一化操作的示例
2020/04/22 Python
Python3中的tuple函数知识点讲解
2021/01/03 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
Weblogc domain问题
2014/01/27 面试题
中专生毕业自我鉴定
2013/11/01 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
武侯祠导游词
2015/02/04 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
2015社区六五普法工作总结
2015/04/21 职场文书
公司员工体检通知
2015/04/21 职场文书
个人维稳承诺书
2015/05/04 职场文书
企业百日安全活动总结
2015/05/07 职场文书
会议室管理制度范本
2015/08/06 职场文书
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript
世界十大狙击步枪排行榜
2022/03/20 杂记