如何使用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+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
PHP实现微信对账单处理
Oct 01 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 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 变量未定义等错误的解决方法
2011/01/12 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
Smarty模板变量与调节器实例详解
2019/07/20 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
Javascript Global对象
2009/08/13 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
Bootstrap基本样式学习笔记之表格(2)
2016/12/07 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
微信小程序如何自定义table组件
2019/06/29 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python jieba库用法及实例解析
2019/11/04 Python
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
安全员岗位职责
2013/11/11 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
解除劳动合同协议书
2014/04/14 职场文书
大学班级学风建设方案
2014/05/01 职场文书
材料化学专业求职信
2014/07/15 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书