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数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
thinkphp集成前端脚手架Vue-cli的教程图解
Aug 30 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP调用全国天气预报数据接口查询天气示例
Feb 20 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 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
PHP编码规范之注释和文件结构说明
2010/07/09 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
ThinkPHP安装和设置
2015/07/27 PHP
php文件上传类完整实例
2016/05/14 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
JavaScript使用Math.Min返回两个数中较小数的方法
2015/04/06 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
浅谈Python的Django框架中的缓存控制
2015/07/24 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
opencv 阈值分割的具体使用
2020/07/08 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
Nike意大利官网:Nike.com IT
2020/01/19 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
3个CCIE对一个工程师的面试题
2012/05/06 面试题
财会自我鉴定范文
2013/12/27 职场文书
运动会入场词200字
2014/02/15 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
委托书格式要求
2015/01/28 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL