PHP实现打包zip并下载功能


Posted in PHP onJune 12, 2018

具体代码如下所示:

$file_template = FCPATH.'canddata/cand_picture.zip';//在此之前你的项目目录中必须新建一个空的zip包(必须存在)
$downname = $card.'.zip';//你即将打包的zip文件名称
$file_name = FCPATH.'canddata/'.$card.'.zip';//把你打包后zip所存放的目录
$result = copy( $file_template, $file_name );//把原来项目目录存在的zip复制一份新的到另外一个目录并重命名(可以在原来的目录)
$zip = new ZipArchive();//新建一个对象
if ($zip->open($file_name, ZipArchive::CREATE) === TRUE) { //打开你复制过后空的zip包
$zip->addEmptyDir($card);//在zip压缩包中建一个空文件夹,成功时返回 TRUE, 或者在失败时返回 FALSE
//下面是我的场景业务处理,可根据自己的场景需要去处理(我的是将所有的图片打包)
$i = 1;
foreach ($cand_photo as $key3 => $value3) {
$file_ext = explode('.',$value3['cand_face']);//获取到图片的后缀名
$zip->addFromString($card.'/'.$card.'_'.$i.'.'.$file_ext[3] , file_get_contents($value3['cand_face']));//(图片的重命名,获取到图片的二进制流)
$i++;
}
$zip->close();
$fp=fopen($file_name,"r"); 
$file_size=filesize($file_name);//获取文件的字节
//下载文件需要用到的头 
Header("Content-type: application/octet-stream"); 
Header("Accept-Ranges: bytes"); 
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=$downname"); 
$buffer=1024; //设置一次读取的字节数,每读取一次,就输出数据(即返回给浏览器) 
$file_count=0; //读取的总字节数 
//向浏览器返回数据 如果下载完成就停止输出,如果未下载完成就一直在输出。根据文件的字节大小判断是否下载完成
while(!feof($fp) && $file_count<$file_size){  
        $file_con=fread($fp,$buffer);  
        $file_count+=$buffer;  
        echo $file_con;  
    } 
fclose($fp); 
//下载完成后删除压缩包,临时文件夹 
if($file_count >= $file_size) { 
unlink($file_name); 
}
}

总结

以上所述是小编给大家介绍的PHP实现打包zip并下载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP编程中八种常见的文件操作方式
Nov 19 PHP
PHP中10个不常见却非常有用的函数
Mar 21 PHP
php一个找二层目录的小东东
Aug 02 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
Feb 18 PHP
PHP中的流(streams)浅析
Jul 02 PHP
php简单复制文件的方法
May 09 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
PHP数据库处理封装类实例
Dec 24 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
Aug 07 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 #PHP
PHP+redis实现的悲观锁机制示例
Jun 12 #PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 #PHP
thinkPHP5框架实现基于ajax的分页功能示例
Jun 12 #PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 #PHP
Laravel框架路由设置与使用示例
Jun 12 #PHP
Laravel框架生命周期与原理分析
Jun 12 #PHP
You might like
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP面向对象法则
2012/02/23 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
求高于平均分的学生学号及成绩
2016/09/01 面试题
夜大毕业生自我评价分享
2013/11/10 职场文书
水电工岗位职责
2014/02/12 职场文书
新手上路标语
2014/06/20 职场文书
2014年公务员个人工作总结
2014/11/22 职场文书
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python