如何使用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和MySql来与ODBC数据连接
Oct 09 PHP
mysql建立外键
Nov 25 PHP
PHP define函数的使用说明
Aug 27 PHP
PHP学习笔记 (1) 环境配置与代码调试
Jun 19 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
PHP删除数组中指定下标的元素方法
Feb 03 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
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
jQuery 操作XML入门
2008/12/25 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
js实现弹幕飞机效果
2020/08/27 Javascript
vue内置组件keep-alive事件动态缓存实例
2020/10/30 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
Django 创建后台,配置sqlite3教程
2019/11/18 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
后勤园长自我鉴定
2013/10/17 职场文书
《沙漠中的绿洲》教学反思
2014/04/24 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
机动车登记业务委托书
2014/10/08 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
工作感言一句话
2015/08/01 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers