在项目中使用php批量导出数据到Excel中,大量数据2w,5w,10w数据就要面临问题
1、导出时间变得很慢,少则1分钟,多则好几分钟,数据量一旦上来,还可能面临导不出来的困窘(这种导出效率正常人都会受不了,更何况是要求苛刻的用户)。
2、导出消耗大量的内存资源,即使把php内存使用设置为无限大,当多个用户同时使用导出功能导出大量数据的时候,服务器内存使用就会直线往上升,报警,甚至宕机,严重影响其他业务
需要注意EXCEL单表只能显示104W数据
解决思路大概是:
1、从数据库中读取要进行数据量分批读取,以防变量内存溢出
2、选择数据保存文件格式是csv文件,以方便导出之后的阅读、导入数据库等操作
3、以防不方便excel读取csv文件,需要104W之前就得把数据分割进行多个csv文件保存
4、多个csv文件输出给用户下载是不友好的,还需要把多个csv文件进行压缩,最后提供给一个ZIP格式的压缩包给用户下载就好。
直接上代码
<?php
/*
*
* @param string $sql 需要导出的数据SQL
* @param string $mark 生成文件的名字前缀
* @param bool $is_multiple 是否要生成多个CSV文件
* @param int $limit 每隔$limit行,刷新输出buffer,以及每个CSV文件行数限制
*
*/
function putCsv($sql, $mark, $is_multi