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 相关文章推荐
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
Jul 10 PHP
深入PHP购物车模块功能分析(函数讲解,附源码)
Jun 25 PHP
php 伪静态之IIS篇
Jun 02 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
joomla组件开发入门教程
May 04 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP 出现 http500 错误的解决方法
Mar 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP防注入安全代码
2008/04/09 PHP
php 获取mysql数据库信息代码
2009/03/12 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
js实现的倒计时按钮实例
2015/06/24 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
2017/07/26 Javascript
vue轮播图插件vue-concise-slider的使用
2018/03/13 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
Python中顺序表的实现简单代码分享
2018/01/09 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
keras中的History对象用法
2020/06/19 Python
大学生村官事迹材料
2014/01/21 职场文书
应届生自荐书
2014/06/23 职场文书
团日活动总结怎么写
2014/06/25 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
2019个人工作总结
2019/06/21 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
python三子棋游戏
2022/05/04 Python