如何使用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 编写的日历
Oct 09 PHP
十天学会php之第三天
Oct 09 PHP
一个简单的php实现的MySQL数据浏览器
Mar 11 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
May 12 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 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合并数组+号和array_merge的区别
2015/06/25 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
php遍历、读取文件夹中图片并分页显示图片的方法
2016/11/15 PHP
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
学习javascript面向对象 实例讲解面向对象选项卡
2016/01/04 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
简单介绍react redux的中间件的使用
2018/04/06 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
2020/10/27 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
python3实现名片管理系统
2020/11/29 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python中bisect的使用方法
2019/12/31 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
模具数控专业自荐信
2014/01/27 职场文书
初二物理教学反思
2014/01/29 职场文书
运动会开幕式解说词
2014/02/05 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书