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
新版mysql+apache+php Linux安装指南
Oct 09 PHP
一个可以找出源代码中所有中文的工具
Oct 25 PHP
关于php fread()使用技巧
Jan 22 PHP
php array的学习笔记
May 16 PHP
浅析PHP文件下载原理
Dec 25 PHP
WordPress开发中的get_post_custom()函数使用解析
Jan 04 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
May 05 PHP
php图片合成方法(多张图片合成一张)
Nov 25 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
thinkPHP5框架接口写法简单示例
Aug 05 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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
AngularJS ui-router (嵌套路由)实例
2017/03/10 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
vue element实现表格合并行数据
2020/11/30 Vue.js
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 异常处理实例详解
2014/03/12 Python
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
python读取LMDB中图像的方法
2018/07/02 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
python 列表推导式使用详解
2019/08/29 Python
在django中自定义字段Field详解
2019/12/03 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
html5唤起app的方法
2017/11/30 HTML / CSS
优秀学生获奖感言
2014/02/15 职场文书
教堂婚礼主持词
2014/03/14 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
三好学生评语大全
2014/12/29 职场文书
迟到检讨书范文
2015/01/27 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python