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 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
多php服务器实现多session并发运行
Oct 09 PHP
PHP学习之PHP变量
Oct 09 PHP
截获网站title标签之家内容的例子
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
PHP4中session登录页面的应用
Jul 25 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
php自动加载的两种实现方法
Jun 21 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 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 无限级 SelectTree 类
2009/05/19 PHP
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
2009/08/04 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
2018/01/03 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
2019/09/11 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python复制文件代码实现
2013/12/23 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Django框架封装外部函数示例
2019/05/28 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
2019/06/25 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
英语教学随笔感言
2014/02/20 职场文书
元宵晚会主持词
2014/03/25 职场文书
诚实守信演讲稿
2014/09/01 职场文书
借条如何写
2015/05/26 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python
python实现学生信息管理系统(面向对象)
2022/06/05 Python