mPDF从未在Ubuntu / Apache / PHP7堆栈上呈现


mPDF never renders on Ubuntu / Apache / PHP7 stack

我正在使用mPDF库将HTML页面转换为pdf。

这个库在我的本地机器和运行PHP 5.6的开发服务器上运行得很好。

然而,在亚马逊新配置的Ubuntu 16盒子上,使用Apache 2.4.18和PHP 7,我无法使其工作。

症状是PDF永远不会生成-浏览器只是一直旋转,最后我不得不退出浏览器以逃避这个过程。我没有收到任何错误信息。

我已经完成了我的脚本,看看这个过程在哪里卡住了,它在这个方法上:

$mPDF->WriteHtml($html);

我试过传递一个非常简单的HTML字符串到函数中,例如:

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
    <b>Hello!</b>
    </body>
</html>

这是可行的

所以我想知道我的HTML的质量。通过W3验证器运行我的HTML显示了几个错误,我现在已经修复了,但这并没有解决我的问题。

所以我现在想知道我的HTML的大小-这是一个大的页面,正在渲染,通常超过20页的PDF。

我的脚本为进程分配了大量内存:

ini_set('memory_limit', '1024M');

服务器总共有8G内存。

有什么我应该检查在服务器配置可能会影响mPDF?

谢谢你的期待。

编辑

在进一步调试并将HTML拆分成越来越小的片段之后,我已经能够生成PDF了——但是它非常慢。

mPDF似乎也找不到图像资产,所以我在PDF上得到了破碎的图像符号。我想知道这个服务器设置是否有一个奇怪的webroot/basePath,这意味着mPDF找不到它正在寻找的资产?

编辑2

想知道这个问题是否现在是mPDF不渲染图像的副本(mPDF错误:图像错误无法找到图像文件)

我看到同样的问题加载缓慢和缺少图像

所以服务器有一个IP防火墙,mPDF使用file_get_contents()来引用PDF的资产作为外部资产,包括域名:

file_get_contents('http://server.com/asset/anAsset.jpg');

这意味着请求从服务器发出,返回到服务器并被防火墙拒绝。

删除防火墙解决了我们的问题。

我仍然想知道mpdf是否可以在本地引用资产。basePath属性的文档似乎表明它总是使用完整的域URL:

https://mpdf.github.io/reference/mpdf-functions/setbasepath.html