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 相关文章推荐
利用 window_onload 实现select默认选择
Oct 09 PHP
PHP中一个控制字符串输出的函数
Oct 09 PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 PHP
删除数组元素实用的PHP数组函数
Aug 18 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
php常用文件操作函数汇总
Nov 22 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 PHP
YII框架批量插入数据的方法
Mar 18 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
php引用传递
Apr 01 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 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 传值赋值与引用赋值的区别
2010/12/29 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
js实现文本框输入文字个数限制代码
2015/12/25 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vuex的使用及持久化state的方式详解
2018/01/23 Javascript
微信小程序数字滚动插件使用详解
2018/02/02 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python实现简单的五子棋游戏
2020/09/01 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
倩碧英国官网:Clinique英国
2018/08/10 全球购物
建材业务员岗位职责
2013/12/08 职场文书
行政专员工作职责
2013/12/22 职场文书
英语教师自荐信
2014/05/26 职场文书
化工工艺设计求职信
2014/06/25 职场文书
音乐教师求职信
2014/06/28 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js