如何使用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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
PHP 和 MySQL 基础教程(四)
Oct 09 PHP
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
PHP面向对象之工作单元(实例讲解)
Jun 26 PHP
php文件后缀不强制为.php的实操方法
Sep 18 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
短波收音机简介
2021/03/01 无线电
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
基于jquery的滑动样例代码
2010/11/20 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python中字符串的修改及传参详解
2016/11/30 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
由面试题加深对Django的认识理解
2019/07/19 Python
python怎么提高计算速度
2020/06/11 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
英国在线购买马术服装:EQUUS
2019/07/12 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
小学生检讨书大全
2014/02/06 职场文书
大学生标准自荐书
2014/06/15 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
导游词之湖北武当山
2019/09/23 职场文书
Go语言基础知识点介绍
2021/07/04 Golang
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis
Redis特殊数据类型bitmap位图
2022/06/01 Redis