如何使用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 相关文章推荐
PHP5 的对象赋值机制介绍
Aug 02 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
解析argc argv在php中的应用
Jun 24 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
PHP实现批量修改文件后缀名的方法
Jul 30 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 PHP
零基础php编程好学吗
Oct 11 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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
基于mysql的bbs设计(五)
2006/10/09 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
js下弹出窗口的变通
2007/04/18 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
vue.js中实现登录控制的方法示例
2018/04/23 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
vue中watch的用法汇总
2020/12/28 Vue.js
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
孕妇病假条怎么写
2015/08/17 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis