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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
一些PHP写的小东西
Dec 06 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
php调用mysql数据 dbclass类
May 07 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
Apr 28 PHP
joomla组件开发入门教程
May 04 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
PDO::inTransaction讲解
Jan 28 PHP
laravel withCount 统计关联数量的方法
Oct 10 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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中显示格式化的用户输入
2006/10/09 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
php广告加载类用法实例
2014/09/23 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
JavaScript高级程序设计
2006/12/29 Javascript
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
2017/09/02 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
Python运算符重载用法实例
2015/05/28 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
python 修改本地网络配置的方法
2019/08/14 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python-numpy-指数分布实例详解
2019/12/07 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
法律工作求职自荐信
2013/10/31 职场文书
管理建议书范文
2014/05/13 职场文书
ktv好的活动方案
2014/08/15 职场文书
英语教师个人总结
2015/02/09 职场文书
毕业生就业推荐表自我评价
2015/03/02 职场文书
学生会招新宣传语
2015/07/13 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
在Python 中将类对象序列化为JSON
2022/04/06 Python