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

线上服务器使用mPDF无法显示图片问题排查求助

解决mPDF线上服务器图片不显示(无报错)的问题

我之前也碰到过一模一样的糟心情况——本地Xampp调试时PDF图片加载正常,部署到线上后PDF能正常生成,但图片直接失踪,连红色叉号这类错误提示都没有,开了showImageErrors也没半点反馈。既然你已经确认了mbstring、zlib、gd扩展都安装到位,那可以从这几个方向逐一排查:

  • 文件路径与权限坑点
    线上服务器的目录结构大概率和本地不一样,比如你本地用相对路径./assets/logo.png,线上可能因为网站根目录配置不同,导致mPDF找不到文件。另外,一定要检查图片所在目录的权限:很多时候服务器默认把资源目录设成了700权限,而PHP进程(比如www-data用户)没有读取权限,这种情况不会抛出显性错误,只会默默加载失败。可以先临时把图片目录权限改成755测试,或者直接用绝对路径指定图片位置,比如$_SERVER['DOCUMENT_ROOT'] . '/assets/logo.png'。

  • 远程资源读取限制
    如果你是通过远程URL加载图片,要注意线上服务器可能禁用了allow_url_fopen,导致mPDF无法拉取远程资源。可以先把远程图片下载到本地服务器,改用本地路径引用试试,或者检查php.ini里的allow_url_fopen配置是否为On。

  • GD库的格式支持细节
    虽然你装了GD扩展,但要确认它是否支持你使用的图片格式——比如我之前遇到过线上GD库没编译WebP支持,而我用了WebP格式的图片,结果就是无声失败。可以在服务器上执行php -i | grep gd,查看GD支持的格式列表,确保你的图片格式在里面。另外,有些服务器会禁用GD的部分解码函数,比如imagecreatefromjpeg,也会导致图片无法处理。

  • mPDF临时目录权限问题
    mPDF会把处理后的图片缓存到临时目录,如果线上服务器的默认临时目录(比如/tmp)没有写入权限,或者剩余空间不足,也会导致图片无法生成缓存,最终不显示。你可以在初始化mPDF时手动指定一个可写的临时目录:

    $mpdf = new \Mpdf\Mpdf([
        'tempDir' => __DIR__ . '/mpdf_cache'
    ]);
    

    记得给这个自定义目录设置可写权限。

  • 服务器错误日志深度排查
    虽然showImageErrors没输出,但相关错误可能已经写到了服务器的PHP错误日志里。去线上服务器的日志目录(比如Apache的error.log、Nginx的php-fpm.log)翻一翻,大概率能找到类似“Permission denied”“Unsupported image format”的提示,这往往能直接定位问题根源。

我当时的问题就是线上GD库不支持WebP格式,把图片转成PNG后就正常显示了。你按上面的顺序逐个排查,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:04:46