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

使用mPDF通过HTML插入图片不显示的问题排查求助

解决mPDF嵌入远程图片不显示的问题

1. 修复data URI转换函数的可靠性问题

你当前的image_data_encode函数依赖file_get_contents,但很多环境默认禁用allow_url_fopen(即使curl已启用),导致无法获取远程图片。换成curl实现更稳定:

function image_data_encode($image_url) {
    $ch = curl_init($image_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 本地开发可临时关闭,生产环境建议开启证书验证
    $data = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if(curl_errno($ch) || $http_code !== 200) {
        error_log('获取图片失败: ' . curl_error($ch));
        curl_close($ch);
        return '';
    }
    curl_close($ch);

    // 自动识别图片MIME类型,避免硬编码png
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mime_type = $finfo->buffer($data);
    
    return "data:$mime_type;base64," . base64_encode($data);
}

2. 检查mPDF的核心配置

确保mPDF初始化时配置了正确的临时目录和远程访问权限:

$mpdf = new \Mpdf\Mpdf([
    'tempDir' => __DIR__ . '/tmp', // 必须保证目录存在且服务器有写入权限
    'allow_url_fopen' => true,
    'img_dpi' => 96 // 匹配浏览器默认DPI,避免图片缩放异常
]);

3. 直接使用远程URL的注意事项

如果不想转data URI,需要确认:

  • mPDF版本支持远程图片(v7及以上版本通常无问题)
  • 服务器能正常访问目标图片URL(可在服务器终端执行curl https://目标图片地址测试)
  • 图片源没有防盗链或重定向限制(部分网站会拦截非浏览器发起的请求)

4. 调试技巧

在图片处理逻辑中加入错误日志,定位具体问题:

  • 检查file_get_contents或curl的返回值是否为false
  • 查看服务器PHP错误日志,确认是否存在文件权限、网络请求类错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:05:37