如何使用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 相关文章推荐
模仿OSO的论坛(二)
Oct 09 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
解析php中const与define的应用区别
Jun 18 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
PHP receiveMail实现收邮件功能
Apr 25 PHP
thinkPHP3.2.2框架行为扩展及demo示例
Jun 19 PHP
php unlink()函数使用教程
Jul 12 PHP
PHP7中I/O模型内核剖析详解
Apr 14 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 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
PHP6新特性分析
2016/03/03 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
jQuery AJAX与jQuery事件的分析讲解
2019/02/18 jQuery
京东优选小程序的实现代码示例
2020/02/25 Javascript
Python实现的几个常用排序算法实例
2014/06/16 Python
Python单元测试框架unittest简明使用实例
2015/04/13 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
全面理解Python中self的用法
2016/06/04 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
Python 去除字符串中指定字符串
2020/03/05 Python
我爱我的祖国演讲稿
2014/05/04 职场文书
职业规划实施方案
2014/06/10 职场文书
军训拉歌口号
2014/06/13 职场文书
物流管理专业推荐信
2014/09/06 职场文书
国庆庆典邀请函
2015/02/02 职场文书
大学生入党自传2015
2015/06/26 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
小学班级管理心得体会
2016/01/07 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis