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制作静态网站的模板框架
Oct 09 PHP
PHP的面试题集
Nov 19 PHP
PHP5 面向对象程序设计
Feb 13 PHP
纯真IP数据库的应用 IP地址转化成十进制
Jun 14 PHP
jQuery 源码分析笔记
May 25 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
php cookie工作原理与实例详解
Jul 18 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
由php中字符offset特征造成的绕过漏洞详解
Jul 07 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
符合W3C网页标准的iframe标签的使用方法
2007/07/19 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
2014/05/19 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
如何将python中的List转化成dictionary
2016/08/15 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python3 反射的四种基本方法解析
2019/08/26 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
北京SQL新华信咨询
2016/09/30 面试题
化学相关工作求职信
2013/10/02 职场文书
药品促销活动方案
2014/02/14 职场文书
小学清明节活动方案
2014/03/08 职场文书
研究生考核个人自我鉴定
2014/03/27 职场文书
激励员工的口号
2014/06/16 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
检讨书模板大全
2015/05/07 职场文书