Php DomPDF呈现大型HTML文件会导致500个错误

Php DomPDF呈现大型HTML文件会导致500个错误,php,dompdf,Php,Dompdf,我使用的是DomPDF的最新版本(0.6.0 beta 3) PHP版本是5.2.17 不幸的是,我使用的是共享托管帐户,无法升级PHP和类似操作。我也没有访问apache错误日志的权限,我认为这对我没有多大帮助 我已经将PHP的内存限制设置为2048M,将最大执行时间设置为999。虽然我不知道它们是否生效。我认为它们其实并不重要,因为我觉得dompf没有超时或内存不足。500错误似乎发生在请求页面10秒后,当我尝试生成页面较少的PDF时,脚本需要更长的时间(12-15秒),但成功结束 我有一个

我使用的是DomPDF的最新版本(0.6.0 beta 3)

PHP版本是5.2.17

不幸的是,我使用的是共享托管帐户,无法升级PHP和类似操作。我也没有访问apache错误日志的权限,我认为这对我没有多大帮助

我已经将PHP的
内存限制设置为
2048M
,将
最大执行时间设置为
999
。虽然我不知道它们是否生效。我认为它们其实并不重要,因为我觉得dompf没有超时或内存不足。500错误似乎发生在请求页面10秒后,当我尝试生成页面较少的PDF时,脚本需要更长的时间(12-15秒),但成功结束

我有一个72.3kb的HTML文件,只有一个小HTML表。(事实上,删除带有表格的页面无助于解决问题。)PDF应该会产生大约35页

经过一番又一番的挖掘,我发现错误发生在第30-31页,在
page\u frame\u reflow.cls.php
函数中的
reflow
中的以下代码行:

  // Render the page
  $this->_frame->get_renderer()->render($child);
echo
ing
memory\u get\u usage
在每个循环(页面)上时,该值保持相当一致,似乎低于可用内存的5%

使用
$this->\u frame->get\u renderer()
上的
get\u class
,我能够确定问题函数是
renderer::render()

不幸的是,对于我来说,没有简单的方法可以继续使用我当前的方法进行调试。方法
Renderer::render()
不允许我将计数器变量添加到参数中,因为它需要与其父函数兼容

任何人都可以帮我,你看到我遗漏了什么吗?你能给我指出纠正这500个错误的正确方向吗

编辑:我已经从HTML文档中删除了内联PHP的所有用法,它似乎没有改变任何东西

编辑2:文档太大,无法完全通过Tidy运行,但最多50000字节没有错误

编辑3:PHP错误日志记录已打开。我可以通过调用错误的方法名和其他东西来生成错误。这些错误会出现在屏幕上。事实上,即使在问题方法出现之前导致无限循环,我也会将PHP最大执行时间到达错误打印到屏幕上。但是,问题区域显示500内部服务器错误页面

编辑4:我去掉了所有CSS,生成的PDF没有样式。现在我们有进展了。我会慢慢地把CSS添加回去,这样我可以缩小问题代码的范围。谢谢,丽芙

编辑5:我将CSS缩小到问题的萌芽:h1规则。我在h1标签上使用了背景图像。因此,从我最初的问题,我所要做的就是删除h1标签的背景图像,以使PDF正常工作。对于DomPDF来说,处理背景图像中的大量元素是一个问题吗

编辑6:这是HTML文件:我必须去掉内容(不是我的)。我用DomPDF测试了这个版本的HTML,得到了一个500服务器错误。我的标题图像是25.1 kb。应该注意的是,每页的页脚也使用了背景图像,效果很好。在HTML的这个副本中,删除1个“章节”部分允许DomPDF完成生成PDF的过程

编辑7:当我第一次遇到问题时,我使用了
memory\u get\u usage
,在调用
Renderer::render()
的循环的顶部,每次它都显示了稍微不同的用法,但低于最大值的6%,最大值设置为
2048M
。我不认为这个问题是超时错误或内存错误,因为我可以在调用
render
之前产生这些类型的错误,并将PHP错误打印到屏幕上。此外,500错误在运行大约10秒后出现-PDF工作时大约需要15-20秒。因此,不太可能出现超时。内存错误,如果是,为什么不打印错误,就像调用
render
之前内存溢出一样


编辑8:我将用作h1标签背景图像的图像从PNG转换为JPG,将其大小从25.1kb减小到2.6kb,并正确生成PDF。这可能是内存问题。PHP应该生成一个错误并向我显示,但事实并非如此

我面临着同样的问题,但仍在努力解决。我正在使用Dompdf,并试图转换一个只有33KB的HTML页面,但我得到一个500内部服务器错误

我有多个外部样式表在我的html页面下的标题部分,包括引导css。但是当我删除引导css时,dompdf工作得很好

删除此行可能会对您有所帮助 -->link type=“text/css”rel=“stylesheet”href=“/bootstrap.css”


但是我不知道应该怎么做才能将Bootstrap.css包含到dompd中,以及为什么Bootstrap样式会导致dompd出错。

通常,当内存限制低于所需内存时,会出现此问题

增加了这些,例如: ini_设置(“内存限制”,“800M”); ini_集合(“最大执行时间”,“800”)

注意:在实例化类之前执行此操作,$dompdf=newDOMPDF()


这里是设置内存限制或最大执行时间的任意设置。

我过去曾使用DOMPDF从HTML代码生成PDF。 我也面临同样的问题。 经过许多天的努力,我终于知道dompdf只适用于3到4页这样的小文档,这是一个粗略的数字。 Dompdf与基于CSS 2的样式很好地结合在一起,并且呈现出接近现实的效果。 但它不支持大页面转换,也不支持转换大页面
https://tcpdf.org/
https://wkhtmltopdf.org/
https://github.com/mikehaertl/phpwkhtmltopdf
https://stackoverflow.com/questions/5663814/how-do-i-get-wkhtmltopdf-to-execute-via-php
PHP Fatal error:  Uncaught exception 'Exception' with message 'The PHP GD extension 
is required, but is not installed.' in \\wwwroot\\app\\dompdf070\\lib\\Cpdf.php:4965
extension=php_gd2.dll