以下是关于PHP中mkdir()函数的详细讲解及示例,涵盖参数说明、权限计算和典型应用场景:
1. 函数定义与参数
bool mkdir(string $path, int $mode = 0777, bool $recursive = false, resource $context = null)
$path:要创建的目录路径(绝对或相对路径)
$mode:目录权限(八进制数,默认0777),Windows系统忽略此参数
$recursive:是否递归创建父目录(默认false)
$context:流上下文(高级用法,通常省略)
2. 权限计算规则
权限由4位八进制数表示(如0755),每位对应不同用户组:
常见组合:
0777:所有用户可读写执行(不安全)0755:所有者可读写执行,其他用户仅读执行(推荐)0700:仅所有者可读写执行
3. 示例与运行结果
示例1:基础目录创建
$dir = "test_dir";
if (mkdir($dir)) {
echo "目录创建成功: $dir"; // 输出: 目录创建成功: test_dir
} else {
echo "目录创建失败";
}结果:当前目录下生成test_dir,权限为0777(受umask影响可能实际为0755)
示例2:指定权限并递归创建
$dir = "a/b/c";
if (mkdir($dir, 0755, true)) {
echo "递归目录创建成功: $dir"; // 输出: 递归目录创建成功: a/b/c
} else {
echo "创建失败(父目录不存在且未启用递归)";
}结果:自动创建a/、a/b/、a/b/c/三级目录,权限为0755
示例3:权限组合验证
$dir = "restricted_dir";
if (mkdir($dir, 0640)) { // 所有者读写,组用户只读
echo "受限目录创建成功"; // 输出: 受限目录创建成功
echo "权限: " . decoct(fileperms($dir) & 0777); // 输出: 权限: 640
}结果:目录权限为0640(所有者6=读写,组4=只读,其他0=无权限)
示例4:错误处理(目录已存在)
$dir = "existing_dir";
mkdir($dir); // 首次创建成功
if (!@mkdir($dir)) { // 抑制错误并检查
echo "目录已存在或无法创建"; // 输出: 目录已存在或无法创建
}结果:第二次调用因目录存在返回false
4. 注意事项
Windows系统:
mode参数无效,权限由系统决定
umask影响:实际权限为mode & ~umask(如umask 022时0777变为0755)递归创建:需显式设置
$recursive=true,否则父目录不存在时报错
通过以上示例和规则,可灵活控制目录权限及创建逻辑