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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
PHP游戏编程25个脚本代码
Feb 08 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php中session退出登陆问题
Feb 27 PHP
php实现的Cookies操作类实例
Sep 24 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
php 实现进制相互转换
Apr 07 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 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魔术方法使用方法汇总
2016/02/14 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
2019/10/11 PHP
JSON 编辑器实现代码
2009/12/06 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
react写一个select组件的实现代码
2019/04/03 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python读取环境变量的方法和自定义类分享
2014/11/22 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
Django设置Postgresql的操作
2020/05/14 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
小学生秋游活动方案
2014/02/23 职场文书
导师评语大全
2014/04/26 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
2014年幼儿园保育工作总结
2014/12/02 职场文书
文明礼仪倡议书
2015/04/28 职场文书
建国大业电影观后感
2015/06/01 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书