我正在开发一个网络应用程序,并使用典型的灯组。我正在使用 dompdf 生成一些 pdf 格式的报告。在一个案例中,我有一个简单的表格列表(考虑客户列表),其中包含一些简单的信息(姓名、电话号码、电子邮件等...),但用户在该列表中有近 400 个客户。尝试将报告呈现为 pdf 时,超出允许的内存大小并发生错误。我的问题是我该如何解决这个问题?如果一个运行报告的用户占用了我所有的 CPU,我只能想象当 100 个用户尝试在生产服务器(rackspace 云服务器)上同时运行报告时会发生这种情况
确切的错误是:
[2013 年 4 月 24 日星期三 01:06:54] [错误] [客户端 127.0.0.1] PHP 致命错误:/home/redacted/redacted/v2/application/ 中允许的 134217728 字节的内存大小已耗尽(试图分配 83 字节) 863 行的 libraries/dompdf/include/style.cls.php,引用者:http://redacted.v2/reports
我是否需要为每个报告运行生成一个单独的进程?我不太确定这是如何完成的(我想我需要通过 PHP 来完成)。基本上我不希望我的服务器在运行大型报告时突然停止。非常感谢任何想法或建议!
您可以运行一个单独的进程来处理所有报告,这样只有一个进程需要占用资源而不是很多。特别是在多用户环境中,这将是一个好主意。是的,您可以从 php 运行进程,查看文档以了解例如 popen()。
另一方面,还应该想到这(dompdf 和 php)是否是处理大型报告的最佳方式。还有其他 pdf 创建服务的实现可以更快、更高效地使用资源。
编辑:为了快速修复您当前的错误,您可以将 PHP 的内存限制延长到例如 256M,但这只是一种解决方法,而不是真正的解决方案。