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的开发框架的现状和展望
Mar 16 PHP
PHP-MySQL教程归纳总结
Jun 07 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
php中JSON的使用与转换
Jan 14 PHP
PHP实现指定字段的多维数组排序函数分享
Mar 09 PHP
深入浅出php socket编程
May 13 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
PHP实现文件上传下载实例
Oct 18 PHP
浅谈PHP中类和对象的相关函数
Apr 26 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 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
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
tp5.1 框架join方法用法实例分析
2020/05/26 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
JS获得多个同name 的input输入框的值的实现方法
2017/01/09 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
Element Card 卡片的具体使用
2020/07/26 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python zip()函数用法实例分析
2018/03/17 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
会计学毕业生求职信
2014/06/25 职场文书
企业领导对照检查材料
2014/08/20 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
计划生育诚信协议书
2014/11/02 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
优秀党员个人总结
2015/02/14 职场文书
2015教师节通讯稿
2015/07/20 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL