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的网址
Nov 25 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
php中addslashes函数与sql防注入
Nov 17 PHP
php读取文件内容的方法汇总
Jan 24 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
Linux下 php7安装redis的方法
Nov 01 PHP
laravel 框架执行流程与原理简单分析
Feb 01 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
php 删除cookie和浏览器重定向
2009/03/16 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
director.js实现前端路由使用实例
2015/02/03 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
JS定时器使用,定时定点,固定时刻,循环执行详解
2016/05/31 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
Django中使用group_by的方法
2015/05/26 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python网络编程详解
2017/10/31 Python
Python3 Random模块代码详解
2017/12/04 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
数学兴趣小组活动总结
2014/07/08 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
2015新学期家长寄语
2015/02/26 职场文书
个人合作协议范本
2015/08/06 职场文书