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

Windows10 Laravel8使用Spatie Browsershot报错ENOENT如何解决

Spatie/Browsershot Windows环境报错解决方案

错误根因

报错核心是Puppeteer运行时无法读取Windows系统的TEMP/TMP环境变量,拼接临时目录路径时前缀变为undefined,导致找不到对应目录创建Chrome临时配置文件。

修复步骤

方案一:修复全局系统环境变量(推荐)

  • 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
  • 检查用户变量/系统变量列表中是否存在TEMP和TMP两个变量,正常值为%USERPROFILE%\AppData\Local\Temp,不存在则手动添加,已存在则确认路径真实有效无拼写错误
  • 修改完成后重启IDE、Laravel服务,确保环境变量生效

方案二:代码内手动指定临时目录(无需改全局配置)

先手动创建storage/temp目录并赋予读写权限,再修改代码如下:

public function receipt(){
    $tempPath = realpath(storage_path('temp'));
    if(!file_exists($tempPath)){
        mkdir($tempPath, 0755, true);
    }

    $image = Browsershot::url('http://localhost:8000/transaction/receipt/123')
        ->setNodeBinary('C:\Users\my_user\nodejs\node.exe')
        ->setNpmBinary('C:\Users\my_user\nodejs\npm.exe')
        ->setChromePath("C:\Users\my_user\AppData\Local\Google\Chrome\Application\chrome.exe")
        // 手动传入环境变量指定临时目录
        ->setOption('env', ['TEMP' => $tempPath, 'TMP' => $tempPath])
        // Windows下可选添加,解决Chrome沙箱启动权限问题
        ->addChromeParameter('--no-sandbox')
        ->addChromeParameter('--disable-dev-shm-usage')
        ->base64Screenshot();

    return $image;
}

额外校验项

  • PHP字符串中配置Windows路径时如果使用双引号,需要对反斜杠做转义,示例:"C:\\Users\\my_user\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"
  • 确认Node、Npm、Chrome的配置路径与本地实际路径一致
  • 确认Laravel进程对storage目录有读写权限

内容的提问来源于stack exchange,提问作者Abimanyu Yuda Dewa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:00:00