使用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
相关产品推荐
相关产品推荐

