使用 mkdir 的权限将不起作用

2022-08-30 17:08:09

我不明白为什么我必须使用才能获得正确的权限。该文件已成功创建,但使用 0755 而不是我在 中指定的 0775。chmodmkdir

( http://php.net/manual/en/function.mkdir.php )

我必须做之后设置正确的权限。chmodmkdir

php中的安全模式关闭.ini并且该文件夹属于php的组和所有者(www-data)

这不起作用:

  if(!is_dir("/var/www/customers/$username/$project_name")) 
  {
    mkdir("/var/www/customers/$username/$project_name",0775);

  }

但这确实如此:

  if(!is_dir("/var/www/customers/$username/$project_name")) 
  {
    mkdir("/var/www/customers/$username/$project_name");
    chmod("/var/www/customers/$username/$project_name",0775);

  }

答案 1

是的,这是因为乌玛斯克...

来自文档的评论:http://php.net/manual/en/function.mkdir.php

您可能会注意到,当您使用此代码创建新目录时:

mkdir($dir, 0777);

创建的文件夹实际上具有 0755 的权限,而不是指定的 0777。你为什么问这个?因为 umask(): http://php.net/manual/en/function.umask.php

umask 的默认值,至少在我的设置中,是 18。即 22 八进制,或 0022。这意味着当您使用 mkdir() 将创建的文件夹设置为 0777 时,PHP 采用 0777 并减去 umask 的当前值,在本例中为 0022,因此结果是 0755 - 这可能不是您想要的。

对此的“修复”很简单,包括以下行:

$old_umask = umask(0);

在使用 mkdir() 创建一个文件夹之前,将您放置的实际值用作 CHMOD。如果要在完成后将 umask 返回到其原始值,请使用以下命令:

umask($old_umask);


答案 2

我认为您可能需要修改您的掩码。

正如 mkdir 手册页上所指出的:

该模式也由当前的umask修改,您可以使用umask()进行更改。

现在,看看umask()手册页,列出的一条评论证实了我的内心想法:

“最好在创建文件后使用 chmod() 更改文件权限。

换句话说,我相信你这样做的方式更安全:

设置掩码,以便将文件创建为用户私有,然后使用 chmod 打开它们。


推荐