您好!欢迎访问家园网-www.jy.wang!

家园网

详细讲解php中的mkdir函数,多举例,每个例子都给出运行结果

网络 作者:本站 点击:

以下是关于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),每位对应不同用户组:

数字位用户组权限值(1:执行, 2:写, 4:读)
第1位特殊权限通常为0(如SUID/SGID)
第2位所有者例:7(4+2+1=读写执行)
第3位所属用户组例:5(4+1=读执行)
第4位其他用户例:5(4+1=读执行)

常见组合‌:

  • 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. 注意事项

  1. Windows系统‌:mode参数无效,权限由系统决定

  2. umask影响‌:实际权限为mode & ~umask(如umask 0220777变为0755

  3. 递归创建‌:需显式设置$recursive=true,否则父目录不存在时报错

通过以上示例和规则,可灵活控制目录权限及创建逻辑

标签: