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 echo 输出字符串函数详解
May 13 PHP
10条PHP高级技巧[修正版]
Aug 02 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
深入浅析Yii admin的权限控制
Aug 31 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
Nov 25 PHP
php验证码生成器
May 24 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
Yii框架连表查询操作示例
Sep 06 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 PHP
mac pecl 安装php7.1扩展教程
Oct 17 PHP
PHP使用递归按层级查找数据的方法
Nov 10 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
sae使用smarty模板的方法
2013/12/17 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
使用angular-cli webpack创建多个包的方法
2018/10/16 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
详解jQuery设置内容和属性
2019/04/11 jQuery
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
vue 中固定导航栏的实例代码
2019/11/01 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
Python制作简单的网页爬虫
2015/11/22 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
树莓派实现移动拍照
2019/06/22 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
python切割图片的示例
2020/11/12 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
奥地利购买珠宝和手表网站:ELLA JUWELEN
2019/09/03 全球购物
主管会计岗位责任制
2014/02/10 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
运动会200米广播稿
2015/08/19 职场文书
七年级作文之游记
2019/12/11 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
MySQL数据库完全卸载的方法
2022/03/03 MySQL
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python