我正在开发一个Web应用程序,并使用一个典型的灯栈。 我正在使用dompdf生成一些报告到PDF。 在一个案例中,我有一个简单的表格列表(想客户端列表)与一些简单的信息(姓名,电话号码,电子邮件等…),但用户有近400个客户端在此列表中。 尝试将报表呈现为pdf时,将超出允许的内存大小并发生错误。 我的问题是如何解决这个问题? 如果一个运行报告的用户正在吃掉我所有的CPU,我只能想象当100个用户在生产服务器(rackspace云服务器)上同时运行报表时,
确切的错误是:
[致命错误] [客户端127.0.0.1] PHP致命错误:在/ home / redacted / redacted / v2 / application /中允许内存大小为134217728字节,耗尽(试图分配83字节)第863行的libraries / dompdf / include / style.cls.php,referer: http://redacted.v2/reports
我是否需要为每个报告运行产生一个单独的进程? 我不完全确定如何完成(我想我需要通过PHP来做到这一点)。 基本上我不希望我的服务器在大型报告运行的时候停下来。 任何想法或build议非常感谢!
你可以运行一个独立的进程来处理所有的报告,这样只有一个进程需要占用资源而不是很多。 特别是在多用户环境中,这将是一个好主意。 是的,你可以从PHP运行进程,检查例如popen()的文档。
另一方面,也应该想到,这(dompdf与PHP)是否是最好的方式去关于大报告。 还有其他的实现PDF创build服务,运行速度更快,资源更有效率。
编辑:为您的当前错误的快速修复,你可以拉伸PHP的内存限制,例如256M,但这只会是一个解决方法,而不是一个真正的解决scheme。