【发布时间】:2023-03-24 11:54:01
【问题描述】:
我正在对我的报告网站中的表使用 DataTables 服务器端处理。我还使用 PHPExcel 将报告导出到 Excel。我的 php 脚本创建用于在浏览器中查看的表格工作正常,但是当我尝试让 PHPExcel 脚本工作时,我得到一个内存不足错误,例如:
我可以看到它在同一个地方出错,并且出现同样的错误,就像我试图在客户端处理报告时一样。这就是为什么我试图在服务器上做这件事。我四处寻找,但我没有看到任何关于这种情况的信息。
有什么我可以尝试的想法吗?
编辑
当我将内存增加到 512 时,我得到了同样的错误,但在不同的地方:
编辑 2
这不是下面提到的问题的重复。我知道我的服务器具有所需的内存,它在将数据呈现给浏览器时使用它。只有当我将相同的数据发送到 PHPExcel 文件时,我才会遇到这个问题。有人提到尝试使用单元缓存,但我不知道 PHPExcel 是什么。这是我第一次尝试使用它。我什至尝试将发送的行数减少到 11 而不是 12,000+,但我仍然收到错误。
更新
经过多次测试,我想我现在知道了一些问题所在。
填充浏览器屏幕的初始绘制只是拉回屏幕所需的内容,从 25 开始到 150。当我尝试导出时,它试图拉出所有内容。我目前拥有的最大报告是 65000+ 行和 35 列,尽管我还有更大的报告即将发布。我将内存限制更新为ini_set('memory_limit', '-1');,这样它就可以使用它需要的任何东西,并且确实如此。
现在它在 300 秒(5 分钟)后超时。我尝试使用ini_set('MAX_EXECUTION_TIME', 10); 修复此问题,但这似乎没有做任何事情(我可能设置错误会对此进行更多研究)。
现在虽然我需要找到 PHPExcel 库的哪种缓存方法最有效。我目前正在使用cache_in_memory_gzip,但我也在测试其他人,因为我读到了它们,它们看起来可能更好。完成测试后,我会再次更新或回答问题。
【问题讨论】:
-
增加PHP允许使用的内存。
-
所以增加 PHP 的可用内存,或者考虑通过单元缓存减少 PHPExcel 的需求
-
@MarkBaker 我在哪里可以了解此单元缓存?
-
PHPExcel documentation 是一个很好的起点
标签: php datatables-1.10 phpexcel-1.8.0