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二分法在IP地址查询中的应用
Aug 12 PHP
php将时间差转换为字符串提示
Sep 07 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
php实现无限级分类
Dec 24 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
php检测url是否存在的方法
Apr 14 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
php微信浏览器分享设置以及回调详解
Aug 01 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
php如何把表单内容提交到数据库
Jul 08 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
Terran兵种介绍
2020/03/14 星际争霸
两个强悍的php 图像处理类1
2009/06/15 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
javascript中的继承实例代码
2011/04/27 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
Vue中rem与postcss-pxtorem的应用详解
2019/11/20 Javascript
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python实现ip地址的包含关系判断
2020/02/07 Python
对tensorflow 中tile函数的使用详解
2020/02/07 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
结束运行python的方法
2020/06/16 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
澳大利亚珠宝商:Shiels
2019/10/06 全球购物
Can a struct inherit from another struct? (结构体能继承结构体吗)
2016/09/25 面试题
酒店服务与管理毕业生求职信
2013/11/02 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
年终考核评语
2014/01/19 职场文书
诚信考试倡议书
2014/04/15 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
反腐倡廉观后感
2015/06/08 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技