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

Laravel创建文件夹报错mkdir(): No such file or directory 技术求助

解决Laravel中mkdir(): No such file or directory报错问题

我之前也碰到过一模一样的问题!这个报错的核心原因几乎都是:你要创建的目标文件夹的父目录不存在——PHP原生的mkdir()默认只会创建最后一级目录,如果它的父级目录还没建好,就会直接抛出这个错误。下面给你几个靠谱的解决办法:

方法一:用Laravel自带的Filesystem工具(推荐)

Laravel封装了非常好用的文件操作工具,能自动帮你递归创建所有缺失的父目录,不用自己手动处理层级:

use Illuminate\Support\Facades\File;

// 构建你要创建的目标目录路径,比如存在storage/app下的custom/uploads
$targetDirectory = storage_path('app/custom/uploads');

// 递归创建目录:第二个参数是权限,第三个true表示递归创建父级,第四个true表示目录已存在时不报错
File::makeDirectory($targetDirectory, 0755, true, true);

参数说明:

  • 0755:目录权限,你可以根据需求调整为0775(如果需要组内写入权限)
  • 第三个true:关键!开启递归创建所有不存在的父目录
  • 第四个true:可选,避免目录已存在时抛出错误

方法二:用原生mkdir()但开启递归

如果你坚持用PHP原生函数,一定要加上第三个参数true来开启递归创建:

// 同样用Laravel的路径辅助函数确保路径正确
$targetDirectory = storage_path('app/custom/uploads');

// 第三个参数true是核心,让PHP自动创建所有缺失的父目录
mkdir($targetDirectory, 0755, true);

额外注意事项

  1. 路径一定要用绝对路径:别用相对路径(比如../storage/app/xxx),优先用Laravel提供的路径辅助函数:

    • storage_path():指向项目的storage目录
    • public_path():指向public目录
    • base_path():指向项目根目录
      这些函数能帮你避免因当前工作目录变化导致的路径错误。
  2. 检查目录权限:如果上面的方法还是报错,大概率是目录权限不足。可以在项目根目录运行以下命令(Linux/macOS环境):

    chmod -R 755 storage/
    chown -R www-data:www-data storage/ # 这里的www-data是你的web服务器用户,比如Nginx/Apache用这个,Apache也可能是apache用户
    

    Windows环境的话,右键storage目录,设置为可读写权限即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:41:54