PHP生成zip压缩包的常用方法示例


Posted in PHP onAugust 22, 2019

本文实例讲述了PHP生成zip压缩包的常用方法。分享给大家供大家参考,具体如下:

压缩一个文件

我们将一个文件生成一个压缩包。

<?php
$path = "c:/wamp/www/log.txt";
$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);  //打开压缩包
$zip->addFile($path,basename($path));  //向压缩包中添加文件
$zip->close(); //关闭压缩包

上述代码将c:/wamp/www/log.txt文件压缩生成了test.zip,并保存在当前目录。

压缩多个文件

压缩多个文件,其实就是addFile执行多次,可以通过数组的遍历来实现。

<?php
$fileList = array(
  "c:/wamp/www/log.txt",
  "c:/wamp/www/weixin.class.php"
);
$filename = "test.zip";
$zip = new ZipArchive();
$zip->open($filename,ZipArchive::CREATE);  //打开压缩包
foreach($fileList as $file){
  $zip->addFile($file,basename($file));  //向压缩包中添加文件
}
$zip->close(); //关闭压缩包

压缩一个目录

<?php
function addFileToZip($path,$zip){
  $handler=opendir($path); //打开当前文件夹由$path指定。
  while(($filename=readdir($handler))!==false){
    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
        addFileToZip($path."/".$filename, $zip);
      }else{ //将文件加入zip对象
        $zip->addFile($path."/".$filename);
      }
    }
  }
  @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
  addFileToZip('rsa/', $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
  $zip->close(); //关闭处理的zip文件
}

压缩并下载zip包

我的时候,我们需要打包之后,提供下载,然后删除压缩包。

可以分为以下几步:

  1. 判断给出的路径,是文件夹,还是文件。文件夹还需要遍历添加文件。
  2. 设置相关文件头,并使用readfile函数提供下载。
  3. 使用unlink函数删除压缩包
<?php
function addFileToZip($path,$zip){
  $handler=opendir($path); //打开当前文件夹由$path指定。
  while(($filename=readdir($handler))!==false){
    if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..',不要对他们进行操作
      if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
        addFileToZip($path."/".$filename, $zip);
      }else{ //将文件加入zip对象
        $zip->addFile($path."/".$filename);
      }
    }
  }
  @closedir($path);
}
$zip=new ZipArchive();
if($zip->open('rsa.zip', ZipArchive::OVERWRITE)=== TRUE){
  $path = 'rsa/';
  if(is_dir($path)){ //给出文件夹,打包文件夹
    addFileToZip($path, $zip);
  }else if(is_array($path)){ //以数组形式给出文件路径
    foreach($path as $file){
      $zip->addFile($file);
    }
  }else{   //只给出一个文件
    $zip->addFile($path);
  }
  $zip->close(); //关闭处理的zip文件
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php session处理的定制
Mar 16 PHP
PHP 多进程 解决难题
Jun 22 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
给ECShop添加最新评论
Jan 07 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
10条php编程小技巧
Jul 07 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
php单例模式的简单实现方法
Jun 10 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 PHP
Laravel 实现数据软删除功能
Aug 21 #PHP
PHP针对redis常用操作实例详解
Aug 17 #PHP
php5.6.x到php7.0.x特性小结
Aug 17 #PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 #PHP
PHP中Session ID的实现原理实例分析
Aug 17 #PHP
解决php extension 加载顺序问题
Aug 16 #PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 #PHP
You might like
openPNE常用方法分享
2011/11/29 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
php中curl使用指南
2015/02/05 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
详解Vue.js入门环境搭建
2017/03/17 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
2017/06/05 Javascript
js实现网页的两个input标签内的数值加减(示例代码)
2017/08/15 Javascript
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
浅谈vuepress 踩坑记
2018/04/18 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
幼儿园保育员责任书
2014/07/22 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
2015年酒店前台工作总结
2015/04/20 职场文书
大学入学感言
2015/08/01 职场文书
2019公司管理制度
2019/04/19 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python