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 相关文章推荐
建立动态的WML站点(三)
Oct 09 PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
php 不使用js实现页面跳转
Feb 11 PHP
yii操作session实例简介
Jul 31 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
php实现的简单检验登陆类
Jun 18 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 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结合正则获取字符串中数字
2015/06/19 PHP
JS OffsetParent属性深入解析
2014/01/13 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
Bootstrap零基础入门教程(三)
2016/07/18 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
python静态方法实例
2015/01/14 Python
深入理解Python异常处理的哲学
2019/02/01 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python twilio模块实现发送手机短信功能
2019/08/02 Python
python实现飞机大战小游戏
2019/11/08 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
C#如何判断当前用户是否输入某个域
2015/12/07 面试题
正隆泰信息技术有限公司上机题
2012/06/14 面试题
乡镇创先争优活动总结
2014/08/28 职场文书
创先争优宣传标语
2014/10/08 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
财务经理岗位职责
2015/01/31 职场文书
教师自荐信范文
2015/03/06 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015迎新晚会开场白
2015/07/17 职场文书