recursive参数控制mkdir是否递归创建父目录:默认false时仅创建最后一级目录,若上级不存在则失败;设为true时自动逐级创建缺失的全部上级目录,且所有新建目录权限均统一设为指定mode。

recursive 参数决定 mkdir 是否能“一路向上”创建父目录。
不设 recursive(默认 false):只建最后一层
比如执行 mkdir('/a/b/c', 0755),但系统里连 /a 都不存在,函数直接失败,返回 false。它不会尝试帮你先建 /a,再建 /a/b,最后建 /a/b/c。
设 recursive = true:自动补全所有缺失的上级目录
同样调用 mkdir('/a/b/c', 0755, true),只要最外层路径(如磁盘根或 web 根)有写权限,PHP 就会逐级检查并创建:
- 先看 /a 存在吗?不存在 → 创建
- 再看 /a/b 存在吗?不存在 → 创建
- 最后创建 /a/b/c
整个路径一次性建成。
权限会统一应用到所有新建的父目录上
注意:所有被递归创建出来的中间目录(如 /a 和 /a/b),权限都和你传入的 $mode 一致。不是只给最后一层设权限。
例如:mkdir('/x/y/z', 0700, true) → /x、/x/y、/x/y/z 全是 0700(仅属主可读写执行)。
使用时必须配合存在性判断
mkdir 在目标目录已存在时也会返回 false,并触发 E_WARNING。所以安全写法是:
- 先用
is_dir($path)或file_exists($path)检查 - 再调用
mkdir($path, $mode, true) - 或者用
@mkdir()抑制警告(不推荐,掩盖问题)
这个参数让 PHP 能像命令行 mkdir -p 一样可靠地初始化多层结构,省去手动遍历创建的麻烦。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











