我正在使用DOMPDF从一个脚本生成大约500个报告。在生成大约10-15个PDF之后,内存不足。
在调试中,看起来它每次加载到字体加载时都会加载8M,但这似乎应该用字体缓存代码来处理。
关于这里出了什么问题的任何想法?我想发布一个简单的代码片段,但大部分内容被抽象为多个层次,所以它不仅仅是一个简单的复制/粘贴。
答案 0 :(得分:2)
如果您使用的是dompdf 0.6 beta,则内存错误是dompdf在呈现表时输入的无限循环的结果。这是一个我无法解决的已知问题。
相关网址:
http://code.google.com/p/dompdf/issues/detail?id=34
http://code.google.com/p/dompdf/issues/detail?id=91
(您看到的错误是pdf PHP致命错误:允许的内存大小为268435456字节耗尽)
答案 1 :(得分:1)
首先,如果这是针对远程商业广告的任何内容,请获取Prince XML。它比任何其他HTML到PDF解决方案都要好得多,也要快得多(而且我已经看过它们了)。成本将在保存的开发人员时间内快速收回。
其次,最快的解决方案可能是在单独的流程中打印每个报告以解决任何内存泄漏问题。如果从命令行运行,则外部循环类似于shell脚本,它将为每个报告启动一个进程。如果你在一个可以做到这一点的操作系统上运行每个脚本,那么它是从Web fork运行的。
答案 2 :(得分:1)
正如cletus所指出的,使用DOMPDF的最快解决方案可能是在一个单独的过程中呈现每个报告。您可以编写一个主脚本来调用执行实际呈现的子脚本(使用exec)。正如你在DOMPDF支持小组的this discussion中看到的那样,它确实有可能提供一点性能提升。
如果没有展示问题的某种示例,很难说出有关内存使用的情况。我不相信在单个脚本中针对多个实例的DOMPDF和底层CPDF渲染引擎有很多优化。因此,每次都可能将字体加载到内存中,即使它可以使用静态变量来缓存该数据。