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邮件类
Jan 03 PHP
解决GD中文乱码问题
Feb 14 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
PHP中uploaded_files函数使用方法详解
Mar 09 PHP
封装ThinkPHP的一个文件上传方法实例
Oct 31 PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
基于JQuery+PHP编写砸金蛋中奖程序
Sep 08 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
PHP中串行化用法示例
Nov 16 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
Yii框架核心组件类实例详解
Aug 06 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中的多态性[译]
2011/08/02 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
提取jquery的ready()方法单独使用示例
2014/03/25 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
2016/06/07 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
基于webpack.config.js 参数详解
2018/03/20 Javascript
使用axios请求时,发送formData请求的示例
2019/10/29 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
JavaScript组合设计模式--改进引入案例分析
2020/05/23 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
python实现识别相似图片小结
2016/02/22 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
2014年乡镇植树节活动方案
2014/02/28 职场文书
医院搬迁方案
2014/06/14 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
观后感开头
2015/06/19 职场文书
五一晚会主持词
2015/07/01 职场文书
2016年元旦主持词
2015/07/06 职场文书
学生会工作感言
2015/08/07 职场文书
Go timer如何调度
2021/06/09 Golang
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL