如何使用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
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
php日历[测试通过]
Mar 27 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 PHP
解析link_mysql的php版
Jun 30 PHP
php用户登录之cookie信息安全分析
May 13 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
PHP查找一列有序数组是否包含某值的方法
Feb 07 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实现与ASP Banner组件相似的类
2006/10/09 PHP
dedecms采集中可以过滤多行代码的正则表达式
2007/03/17 PHP
php 归并排序 数组交集
2011/05/10 PHP
php中的三元运算符使用说明
2011/07/03 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
php并发加锁示例
2016/10/17 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
HTML node相关的一些资料整理
2010/01/01 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
python字典的常用操作方法小结
2016/05/16 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python三引号输出方法
2019/02/27 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
求职信写作要突出重点
2014/01/01 职场文书
面试后感谢信
2014/02/01 职场文书
销售员求职个人的自我评价
2014/02/19 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
成绩单评语
2015/01/04 职场文书
民事调解书范文
2015/05/20 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Python何绘制带有背景色块的折线图
2022/04/23 Python
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python