mkdir()成功返回true,表示目录按路径创建成功、父目录(recursive时)一并创建、权限已设(Windows忽略)且路径无冲突;失败返回false,常见原因包括路径已存在、父目录缺失、权限不足、路径非法或磁盘满。

mkdir() 函数的返回值很简单:成功时返回 true,失败时返回 false。
这个布尔值是判断目录是否创建成功的直接依据,不是状态码,也不抛出异常(除非配合错误报告机制如 set_error_handler 捕获 E_WARNING)。
✅ 返回 true 表示什么?
- 目录已按指定路径成功创建;
- 所有父级目录(如果启用了
recursive = true)也都一并创建完成; - 权限设置(
mode)已尽可能应用(注意:Windows 下会被忽略); - 路径不冲突,即目标位置原本不存在同名文件或目录。
示例:
if (mkdir('./uploads/2026/11', 0755, true)) { echo "目录创建成功"; }
❌ 返回 false 表示什么?
常见原因包括:
- 目标路径已存在(即使是个同名文件或空目录,也会失败);
- 父级目录缺失,且未启用
recursive参数; - 当前脚本没有写入权限(比如 Web 服务器用户对父目录不可写);
- 路径包含非法字符、过长,或磁盘已满;
- 使用了相对路径但当前工作目录不可控(建议用
__DIR__或realpath()明确基准)。
⚠️ 注意:
mkdir()失败时不会自动提示原因,只返回false。若需定位问题,应配合:
is_dir($path)或file_exists($path)判断是否已存在;error_get_last()查看最近的E_WARNING(如“Permission denied”或“No such file or directory”);clearstatcache()避免因缓存导致is_dir()判断不准。
? 小提醒:别只靠返回值做全部判断
因为 mkdir() 对“已存在”也返回 false,所以典型安全写法是:
$path = './data/cache';
if (!is_dir($path)) {
if (!mkdir($path, 0755, true)) {
throw new RuntimeException("无法创建目录:$path");
}
}
这样既避开重复创建报错,又确保真正失败时能捕获处理。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











