如何使用php生成zip压缩包


Posted in PHP onApril 21, 2021

压缩一个文件

我们将一个文件生成一个压缩包。

<?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生成zip压缩包的详细内容,更多关于php生成zip压缩包的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
php 执行系统命令的方法
Jul 07 PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 PHP
数据库中排序的对比及使用条件详解
Feb 23 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
php-msf源码详解
Dec 25 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 PHP
PHP使用非对称加密算法RSA
laravel ajax curd 搜索登录判断功能的实现
thinkphp 获取控制器及控制器方法
Apr 16 #PHP
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
PHP实现考试倒计时功能代码
Apr 16 #PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
PHP 对接美团大众点评团购券(门票)的开发步骤
You might like
php数组对百万数据进行排除重复数据的实现代码
2010/06/08 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php使用curl模拟登录后采集页面的例子
2013/11/04 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
python之DataFrame实现excel合并单元格
2021/02/22 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
简单了解python PEP的一些知识
2019/07/13 Python
python计算导数并绘图的实例
2020/02/29 Python
Python操作Excel的学习笔记
2021/02/18 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
学校经典推荐信
2013/10/30 职场文书
京剧自荐信
2014/01/26 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
村党支部公开承诺书
2014/05/29 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
机械生产实习心得体会
2016/01/22 职场文书
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python