如何使用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 相关文章推荐
一个简单的自动发送邮件系统(一)
Oct 09 PHP
PHP学习之PHP表达式
Oct 09 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
深入解析php中的foreach函数
Aug 31 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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小偷的核心程序
2007/04/09 PHP
php无限遍历目录示例
2014/02/21 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
如何让node运行es6模块文件及其原理详解
2018/12/11 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
js实现微信聊天界面
2020/08/09 Javascript
写了个监控nginx进程的Python脚本
2012/05/10 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
使用Selenium破解新浪微博的四宫格验证码
2018/10/19 Python
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
python定时检测无响应进程并重启的实例代码
2019/04/22 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
CSS3基础(RGBa、text-shadow、box-shadow、border-radius)
2012/11/13 HTML / CSS
shell程序中如何注释
2012/02/17 面试题
安全施工标语
2014/06/07 职场文书
党性心得体会
2014/09/03 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python