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 5.3新特性命名空间规则解析及高级功能
Mar 11 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
在PHP中利用wsdl创建标准webservice的实现代码
Dec 07 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
php删除左端与右端空格的方法
Nov 29 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
laravel 中如何使用ajax和vue总结
Aug 16 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 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
str_replace只替换一次字符串的方法
2013/04/09 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
2017/01/22 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
NodeJS父进程与子进程资源共享原理与实现方法
2018/03/16 NodeJs
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
Vue结合路由配置递归实现菜单栏功能
2020/06/16 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
Python列表解析配合if else的方法
2018/06/23 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python更新所有已安装包的操作
2020/02/13 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
ORACLE第二个十问
2013/12/14 面试题
大学生2014全国两会学习心得体会
2014/03/10 职场文书
春节联欢会主持词
2014/03/24 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
《云房子》教学反思
2014/04/20 职场文书
2014年销售员工作总结
2014/12/01 职场文书
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python