最近公司业务需求,需要导出几十万数据。原有的phpexcel 导出显然不能满足这个需求, 其一:phpexcel 只能导出不到7万条数据;其二:很容易导致内存暴增,请求报错。然后我在网上看到了这个文章https://blog.csdn.net/tim_phper/article/details/77581071。
解决的思路就是: 分批输出,不断的刷新缓冲。利用到ob_flush() 和flush() 函数。http://www.jb51.net/article/37822.htm/
首先要明确一个概念buffer ,其是不同设备之前交换数据的一个区域, 当buffer 达到限定值后(在php.ini配置文件中找到output_buffering配置),输出数据都会写入到php output_buffering中,直到output_buffering写满,通过tcp将这些数据传送给浏览器。
开启缓冲前,数据在等待输出缓冲状态,flush () 函数可以直接输出到浏览器端。
开启缓冲后,数据在输出缓冲状态,flush()就不起作用,需要用ob_flush() 将数据状态由输出状态调整为,
https://stackoverflow.com/questions/4191385/php-buffer-ob-flush-vs-flush
贴上封装的代码:
/**
*
通用的导出类
*
@param
$title
导出的标题
*
@param
$headArr
导出内容表头
*
@param