如何使用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读取XML值的代码(推荐)
Jan 01 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
php计划任务之ignore_user_abort函数实现方法
Jan 08 PHP
XHProf报告字段含义的解析
May 17 PHP
CI框架数据库查询之join用法分析
May 18 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php+ajax实现异步上传文件或图片功能
Jul 18 PHP
php依赖注入知识点详解
Sep 23 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 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 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
JS异常处理的一个想法(sofish)
2013/03/14 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python的Twisted框架上手前所必须了解的异步编程思想
2016/05/25 Python
python中defaultdict的用法详解
2017/06/07 Python
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Python APScheduler执行使用方法详解
2020/12/10 Python
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
心理健康心得体会
2014/01/02 职场文书
校长先进事迹材料
2014/02/01 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
主持人开幕词
2015/01/29 职场文书
教师节主题班会方案
2015/08/17 职场文书
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python