如何使用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中正确的使用json
Aug 06 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
Jun 08 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
php类的扩展和继承用法实例
Jun 20 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
一个非常实用的php文件上传类
Jul 04 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 PHP
laravel清除视图缓存的代码
Oct 23 PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 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
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
jQuery对象的链式操作用法分析
2016/05/10 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
node.js调用C++函数的方法示例
2018/09/21 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
js和jquery判断数据类型的4种方法总结
2020/08/28 jQuery
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
python如何制作缩略图
2019/04/30 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
美国一家主打母婴用品的团购网站:zulily
2017/09/19 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
90后毕业生的求职信范文
2013/09/21 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
优秀大学生自荐信
2014/06/09 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
大学团日活动总结书
2015/05/11 职场文书
工作表现证明
2015/06/15 职场文书
2016年党员干部公开承诺书
2016/03/24 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
Windows Server 2022 超融合部署(图文教程)
2022/06/25 Servers