如何使用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 相关文章推荐
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
有关php运算符的知识大全
Nov 03 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
postfixadmin忘记密码后的修改密码方法详解
Jul 20 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
PHP中OpenSSL加密问题整理
Dec 14 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中static和const关键字的区别
2007/03/19 PHP
Zend Guard一些常见问题解答
2008/09/11 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
javascript数组的使用
2013/03/28 Javascript
javascripit实现密码强度检测代码分享
2013/12/12 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
jQuery简单实现input文本框内灰色提示文本效果的方法
2015/12/02 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
深入解析Python中函数的参数与作用域
2016/03/20 Python
Python实现翻转数组功能示例
2018/01/12 Python
python3.x实现发送邮件功能
2018/05/22 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python super()函数的基本使用
2020/09/10 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
2021/02/01 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
详解使用双缓存解决Canvas clearRect引起的闪屏问题
2019/04/29 HTML / CSS
phpquery中文手册
2021/03/18 PHP
构造方法和其他方法的区别
2016/04/26 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
三年级音乐教学反思
2014/01/28 职场文书
简单租房协议书
2014/04/09 职场文书
病媒生物防治方案
2014/05/13 职场文书
宣传普通话标语
2014/06/27 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
2015新年寄语大全
2014/12/08 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python