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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
php中http_build_query 的一个问题
Mar 25 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
php 实现进制相互转换
Apr 07 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHP简单实现DES加密解密的方法
Jul 12 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
JS+CSS实现模仿浏览器网页字符查找功能的方法
2015/02/26 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Python日志模块logging简介
2015/04/13 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
详解python之协程gevent模块
2018/06/14 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
美的官方商城:Midea
2016/09/14 全球购物
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
应届护士推荐信
2013/11/16 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
同事打架检讨书
2015/05/06 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
python urllib库的使用详解
2021/04/13 Python
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL