代码之家  ›  专栏  ›  技术社区  ›  Jan Hančič

mkdir忽略模式,但使用递归参数

  •  2
  • Jan Hančič  · 技术社区  · 15 年前

    PHP的 mkdir 函数具有以下签名:

    bool mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context ]]] )

    我想调用这个函数来指定 $pathname $recursive 设置为 true 但是我不想详细说明 $mode 参数。我们在服务器级别控制新文件/目录的权限,因此不希望在我的代码中指定它们。

    那我该怎么通过呢 $模式 所以它被有效地忽略了,并且没有发生任何变化?我没找到办法。

    也许唯一的解决方案是编写一个自定义 麦克迪尔 函数将打破路径并逐个创建目录?

    4 回复  |  直到 15 年前
        1
  •  3
  •   Ahmed Aman    15 年前

    为什么不将模式设置为默认值0777呢?

        2
  •  1
  •   lc.    15 年前

    0777 ?

    除非我遗漏了什么,否则签名会显示三个可选参数。前两个, $mode $recursive 默认值为 0777 false ,当未指定时。明确地指定它不会改变行为。

        3
  •  1
  •   Pekka    15 年前

    0777 是默认值。如果不指定参数, 0777 将被使用,因此任何指定它的“四处走动”尝试都是没有意义的。

    我不认为你会绕过这一点,因为这不是php:gnu/linux的行为 mkdir() 做同样的事情:

    参数模式指定要使用的权限。它由进程的umask以通常的方式进行修改:创建的目录的权限是(模式&~umask&0777)。

    我不确定这是否是你需要担心的事情。如果是的话,我认为最好的方法就是检查父目录的权限并应用它。

        4
  •  1
  •   Sadat    15 年前

    很抱歉,如果您想给$recursive参数,就无法转义$mode param。

    您可以将模式存储在变量中,并在以后的任何位置使用它-

    $mode = 0777;
    
    mkdir($file_name, $mode, $recursive);
    
    推荐文章