我正在使用PHPExcel框架尝试从mysql查询中写出一个非常大的excel文档。
一切正常,直到我点击5000行标记(或那里有大约),页面被标记错误:
Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate yyy bytes) in zzz on line aaa
我知道这是记录在案的,我已经调整了服务器上的内存分配,但即便如此,我仍然达到了上限。我也试图关闭格式化,但实际上我需要它。
那么有没有办法用小块写入,或附加到excel文档,所以我不会耗尽内存分配?我正在思考沿着页面写行说1000行,然后重定向到自己并使用GET处理下一个1000来跟踪。例如:
index.php?p=0
然后重定向到
index.php?p=1000
,
但是,如果不打开整个文件,我找不到附加到现有文档的方法。
答案 0 :(得分:3)
没有办法用块编写,虽然常见的错误是人们将mysql数据加载到数组中,然后遍历设置Excel单元格数据的数组。在循环遍历mySQL查询结果集时,设置单元数据的内存效率更高。
如果您需要将内存使用量降至最低,您使用的是哪种单元缓存方法?单元缓存速度较慢,但可以节省大量内存。