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中,文件上传
Dec 06 PHP
php中对xml读取的相关函数的介绍一
Jun 05 PHP
php session 错误
May 21 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
Jun 24 PHP
如何在php中正确的使用json
Aug 06 PHP
php绘制一条直线的方法
Jan 24 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
PHP中多线程的两个实现方法
Oct 14 PHP
thinkphp项目如何自定义微信分享描述内容
Feb 20 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
Mar 04 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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实现json编码的方法
2015/07/30 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
JavaScript脚本性能的优化方法
2007/02/02 Javascript
json 定义
2008/06/10 Javascript
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
简单总结JavaScript中的String字符串类型
2016/05/26 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
原生js二级联动效果
2017/06/20 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
代码详解django中数据库设置
2019/01/28 Python
python挖矿算力测试程序详解
2019/07/03 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
详解Python中的分支和循环结构
2020/02/11 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
网上书店创业计划书
2014/01/12 职场文书
保险公司晨会主持词
2014/03/22 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2015夏季作息时间调整通知
2015/04/24 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Python中的套接字编程是什么?
2021/06/21 Python