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版(3)
Oct 09 PHP
php使用GeoIP库实例
Jun 27 PHP
yii操作session实例简介
Jul 31 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
Mar 07 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
thinkphp实现附件上传功能
May 26 PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 PHP
Laravel中GraphQL接口请求频率实战记录
Sep 01 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
PHP IPV6正则表达式验证代码
2010/02/16 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
php5与php7的区别点总结
2019/10/11 PHP
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
JavaScript This指向问题详解
2019/11/25 Javascript
[03:38]2014DOTA2西雅图国际邀请赛 VG战队巡礼
2014/07/07 DOTA
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
Python BS4库的安装与使用详解
2018/08/08 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
python利用Excel读取和存储测试数据完成接口自动化教程
2020/04/30 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
《手指教学》反思
2014/02/14 职场文书
责任担保书范文
2014/05/21 职场文书
电子商务专业求职信
2014/07/10 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
利用Python+OpenCV三步去除水印
2021/05/28 Python