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的FTP学习(一)
Oct 09 PHP
实时抓取YAHOO股票报价的代码
Oct 09 PHP
PHP生成静态页面详解
Nov 19 PHP
php xml-rpc远程调用
Dec 19 PHP
php 无限级 SelectTree 类
May 19 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
PHP安全配置详细说明
Sep 26 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
常见PHP数据库解决方案分析介绍
Sep 24 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP实现更改hosts文件的方法示例
Aug 08 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
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
Jquery性能优化详解
2014/05/15 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
JavaScript模拟实现继承的方法
2015/03/30 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
jQuery实现简单的网页换肤效果示例
2016/09/18 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
js实现蒙版效果
2020/01/11 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python 调用Java实例详解
2017/06/02 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
纯CSS3实现自定义Tooltip边框涂鸦风格的教程
2014/11/05 HTML / CSS
银行员工职业规划范文
2014/01/21 职场文书
不假外出检讨书
2014/01/27 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js
解决vue自定义组件@click点击失效问题
2022/04/30 Vue.js