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

时间:2010-07-22 09:23:58

标签: php permissions mkdir

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

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

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

那么我应该以{{1​​}}传递什么,以便它被有效地忽略并且不会发生chmod?我还没找到办法。

也许唯一的解决方案是编写一个自定义的$mode函数来破坏路径并逐个创建目录?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

很抱歉,如果你想给$递归参数,就无法逃避$ mode param。

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

$mode = 0777;

mkdir($file_name, $mode, $recursive);

答案 2 :(得分:1)

0777

除非我遗漏了某些内容,否则签名会显示三个可选参数。如果未指定,前两个$mode$recursive的默认值分别为0777false。明确指定它不应该改变行为。

答案 3 :(得分:1)

0777是默认值。如果你没有指定参数,那么将使用0777,所以任何试图“绕过”指定它都是没有用的。

我认为你根本不会解决这个问题,因为这不是PHP的行为:GNU / Linux的mkdir()做同样的事情:

  

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

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