加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP实现及时天生并下载超大数据量的EXCEL文件详解

发布时间:2021-03-14 02:31:17 所属栏目:编程 来源:网络整理
导读:媒介 最近在事变中接到一个需求,通过选择的时刻段导出对应的用户会见日记到excel中, 因为用户量较大,常常会有导出50万加数据的环境。而常用的PHPexcel包必要把全部数据拿到后才气天生excel, 在面临天生超大数据量的excel文件时这显然是会造成内存溢出的

媒介

最近在事变中接到一个需求,通过选择的时刻段导出对应的用户会见日记到excel中, 因为用户量较大,常常会有导出50万加数据的环境。而常用的PHPexcel包必要把全部数据拿到后才气天生excel, 在面临天生超大数据量的excel文件时这显然是会造成内存溢出的,以是思量行使让PHP边写入输出流边让赏识器下载的情势来完成需求。

我们通过如下的方法写入PHP输出流

php://output是一个可写的输出流,应承措施像操纵文件一样将输出写入到输出流中,PHP会把输出流中的内容发送给web处事器并返回给提倡哀求的赏识器

其它因为excel数据是从数据库里慢慢读出然后写入输出流的以是必要将PHP的执行时刻设长一点(默认30秒)set_time_limit(0)差池PHP执行时刻做限定。

注:以下代码只是阐发天生大数据量EXCEL的思绪和步调,而且在去掉项目营业代码后措施有语法错误不能拿来直接运行,请按照本身的需求添补对应的营业代码!

getArticleAccessLog($timeStart,$timeEnd,$lastId,$perSize); foreach($accessLog as $access) { $rowData = [ ......//每一行的数据 ]; mb_convert_variables('GBK',$rowData); fputcsv($fp,$rowData); $lastId = $access->id; } unset($accessLog);//开释变量的内存 //革新输出缓冲到赏识器 ob_flush(); flush();//必需同时行使 ob_flush() 和flush() 函数来革新输出缓冲。 } fclose($fp); exit(); }

好了, 着实很简朴,就是用慢慢写入输出流并发送到赏识器让赏识器去慢慢下载整个文件,因为是慢慢写入的无法获取文件的总体size以是就没步伐通过配置header("Content-Length: $size");在下载前汇报赏识器这个文件有多大了。不外不影响整体的结果这里的焦点题目是办理大文件的及时天生和下载。

总结

以上就是这篇文章的所有内容了,但愿本文的内容对各人的进修可能事变具有必然的参考进修代价,假若有疑问各人可以留言交换,感谢各人对编程之家的支持。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读