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

Laravel Octane(Swoole)因cwd问题无法下载PDF,如何全局设置工作目录?

解决Laravel Octane(Swoole)下dompdf生成PDF的cwd为空问题

核心原因

切换到Swoole环境后,Octane的worker进程当前工作目录(cwd)被清空,导致dompdf依赖的Symfony Process无法找到有效工作目录,触发“The provided cwd "" does not exist.”错误。

解决方法

1. 通过Octane启动钩子全局设置cwd

在项目的bootstrap/app.php文件中,添加Octane启动回调,为所有Swoole worker进程设置统一的工作目录:

use Laravel\Octane\Facades\Octane;

Octane::starting(function ($server) {
    // 将工作目录设为项目根目录
    chdir(base_path());
});

这个回调会在每个Swoole worker进程启动时执行,确保所有进程的cwd都指向项目根目录,从根源解决Symfony Process的路径问题。

2. 直接指定dompdf临时目录(额外防护)

为避免后续路径依赖问题,可直接配置dompdf使用自定义临时目录,不依赖进程cwd:

  • 先发布dompdf配置文件(如果未发布):
    php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
    
  • 打开config/dompdf.php,修改temp_dir配置:
    'temp_dir' => storage_path('app/dompdf/temp'),
    
  • 创建对应目录并设置权限:
    mkdir -p storage/app/dompdf/temp
    chmod -R 775 storage/app/dompdf/temp
    

验证设置是否生效

在生成PDF的代码前,临时添加代码检查当前工作目录:

dd(getcwd());

如果输出项目根目录的绝对路径,说明cwd设置成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 23:07:39