You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
      

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默认可能不显示图片加载错误,导致无法定位问题。

  • 调试:开启图片错误显示:
    $mpdf->showImageErrors = true;
    
    重新生成PDF,查看是否有具体错误提示。

验证流程

按以下顺序排查,逐步缩小范围:

  1. 确认allow_url_fopen已开启;
  2. 开启mPDF的图片错误提示,查看具体报错;
  3. 添加curl SSL跳过验证的配置;
  4. 确认mPDF的img_remote_enabled配置为true。

内容的提问来源于stack exchange,提问作者Najmuddin Roshenry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:17:26