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

使用laravel-dompdf生成PDF报错:getimagesize()目录读取失败

解决laravel-dompdf生成PDF时getimagesize读取目录报错的问题

错误原因

报错getimagesize(): Read of 8192 bytes failed with errno=21 Is a directory的核心原因是:dompdf在渲染视图时,试图调用getimagesize()读取目录路径而非图片文件路径,导致函数执行失败。该问题与内存限制、上传大小无关,之前的优化方向不对。

解决方案

  • 检查视图中的图片引用
    打开fee_vouchers.saved_voucher视图文件,逐一核对所有<img>标签的src属性:

    • 确保路径指向具体图片文件(如/images/invoice-logo.jpg),而非目录(如/images/);
    • 如果使用Laravel的asset()或storage_url()辅助函数生成路径,确认函数返回的是有效文件路径,而非文件夹路径。
  • 排查动态传递的图片路径
    检查$data数组中与图片相关的字段,确认这些字段的值是文件路径而非目录路径。可以临时添加调试代码验证:

    // 在loadView前验证$data中的图片路径
    foreach ($data as $key => $value) {
        if (str_contains($key, 'image') || str_contains($key, 'img')) {
            if (!is_file(public_path($value))) {
                dd("Invalid path for {$key}: {$value}");
            }
        }
    }
    
  • 简化视图定位问题
    临时将fee_vouchers.saved_voucher视图简化为纯文本内容,去掉所有图片引用,测试是否能正常生成PDF。如果可以,再逐个添加图片,定位到触发报错的具体图片路径。

  • 验证dompdf的图片加载配置
    打开config/dompdf.php配置文件,确认:

    • 本地图片加载路径是否可访问,避免因权限或路径解析错误导致dompdf误把目录当文件;
    • enable_remote配置仅在需要加载远程图片时开启,本地图片无需开启该选项。

代码优化建议

在生成PDF前,提前验证所有图片路径的有效性,避免无效路径进入dompdf渲染流程:

// 示例:验证$data中的image_path字段
if (isset($data['image_path']) && !is_file(public_path($data['image_path']))) {
    throw new \RuntimeException("图片路径无效:{$data['image_path']}");
}

$pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView(
    'fee_vouchers.saved_voucher',
    $data
);

$output = $pdf->setPaper('a4', 'landscape')
           ->setWarnings(false)
           ->output();

Storage::put($full_path, $output);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:25:19