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文件上传实例详解!!!
Jan 02 PHP
php cookies中删除的一般赋值方法
May 07 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
CI框架Session.php源码分析
Nov 03 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php文件系统处理方法小结
May 23 PHP
PHP对象实例化单例方法
Jan 19 PHP
php 猴子摘桃的算法
Jun 20 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 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
3
2006/10/09 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
学习ExtJS form布局
2009/10/08 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
js模式化窗口问题![window.dialogArguments]
2016/10/30 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
python获取当前计算机cpu数量的方法
2015/04/18 Python
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
python写一个md5解密器示例
2018/02/23 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Python面向对象程序设计OOP入门教程【类,实例,继承,重载等】
2019/01/05 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python 整数越界问题详解
2019/06/27 Python
python 提取文件指定列的方法示例
2019/08/07 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
pytorch构建多模型实例
2020/01/15 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
求职简历自我评价范例
2014/03/12 职场文书
会计学专业求职信
2014/07/17 职场文书
三严三实对照检查材料
2014/08/25 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
2015年员工试用期工作总结
2014/12/12 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
Python中的套接字编程是什么?
2021/06/21 Python