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(2)――PHP类型
Feb 15 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
php里array_work用法实例分析
Jul 13 PHP
php实现的农历算法实例
Aug 11 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
Jan 05 PHP
php修改数组键名的方法示例
Apr 15 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
Laravel框架源码解析之反射的使用详解
May 14 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 日常开发小技巧
2009/09/23 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
原生javascript 学习之js变量全面了解
2016/07/14 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
js+html+css实现手动轮播和自动轮播
2020/12/30 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python使用matplotlib画饼状图
2018/09/25 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
车辆转让协议书
2014/04/15 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
2014年党员整改措施范文
2014/09/21 职场文书
年底个人总结范文
2015/03/10 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis