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 相关文章推荐
理解PHP5中static和const关键字的区别
Mar 19 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
php中字符串和正则表达式详解
Oct 23 PHP
Yii框架关联查询with用法分析
Dec 02 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
PHP内存使用情况如何获取
Oct 10 PHP
php批量删除操作(数据访问)
May 23 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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 eval函数一句话木马代码
2015/05/21 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
Javascript 变量作用域 两个可能会被忽略的小特性
2010/03/23 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
Angular4学习笔记之新建项目的方法
2017/07/18 Javascript
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
《夜晚的实验》教学反思
2014/02/19 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
环保建议书500字
2014/05/14 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
推销搭讪开场白
2015/05/28 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
python lambda 表达式形式分析
2022/04/03 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技