mPDF中HTML <img>生产服务器不渲染,$mpdf->Image()正常的原因排查
mPDF HTML
<img>标签不渲染但$mpdf->Image()可用的问题排查 核心逻辑差异
mPDF对两种图片加载方式的处理逻辑存在明显区别:
$mpdf->Image():直接调用底层图片加载方法,对远程URL的兼容性更强,部分场景下会自动适配环境限制;- HTML
<img>:通过WriteHTML()解析时,受PHP全局配置、mPDF的HTML解析规则双重约束。
可能原因及解决方法
1. PHP allow_url_fopen 未开启
生产服务器的allow_url_fopen可能被禁用,这是mPDF解析HTML远程图片的必要条件,但$mpdf->Image()可能通过curl绕过此限制。
- 排查:在生产服务器执行
phpinfo(),查看allow_url_fopen的状态; - 修复:
- 修改php.ini:
allow_url_fopen = On,重启PHP服务; - 代码中临时开启(需PHP权限允许):
ini_set('allow_url_fopen', 1);
- 修改php.ini:
2. SSL证书验证失败
生产服务器无法验证远程图片URL的SSL证书(如证书过期、自签名、链不完整),$mpdf->Image()默认可能跳过验证,而HTML解析逻辑严格执行验证。
- 修复:初始化mPDF时配置curl跳过SSL验证:
$mpdf = new \Mpdf\Mpdf([ 'curlOptions' => [ CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false, ] ]);
3. mPDF远程图片加载配置未开启
mPDF 8.x版本有专门控制HTML中远程图片的配置项,默认可能未开启。
- 修复:初始化mPDF时启用远程图片支持:
$mpdf = new \Mpdf\Mpdf([ 'img_remote_enabled' => true ]);
4. 隐藏错误未触发
mPDF默认可能不显示图片加载错误,导致无法定位问题。
- 调试:开启图片错误显示:
重新生成PDF,查看是否有具体错误提示。$mpdf->showImageErrors = true;
验证流程
按以下顺序排查,逐步缩小范围:
- 确认
allow_url_fopen已开启; - 开启mPDF的图片错误提示,查看具体报错;
- 添加curl SSL跳过验证的配置;
- 确认mPDF的
img_remote_enabled配置为true。
内容的提问来源于stack exchange,提问作者Najmuddin Roshenry
相关产品推荐
相关产品推荐

