mkdir的权限赢得';不起作用


Permissions with mkdir won't work

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

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

我必须在mkdir之后执行chmod才能设置正确的权限。

php.ini中的安全模式关闭,文件夹属于php的组和所有者(www数据)

这不起作用:

  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);
  }

是的,这是因为umask。。。

来自文档的评论: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()CHMOD时,创建的文件夹0777,PHP获取0777并执行子字符串umask的当前值,以案例0022,因此结果为0755-这不是你想要的,可能

对此的"修复"很简单,包括此行:

$old_umask=umask(0);

在创建文件夹之前mkdir()的实际值将用作CHMOD。如果你愿意喜欢将umask恢复原状当你完成时,使用这个:

umask($old_umask);

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

如mkdir手册页所示:

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

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

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

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

设置你的umask,使文件对你的用户是私有的,然后使用chmod打开它们。

在创建目录之前尝试调用此函数:clearstatcache();此外,如果您对另一个用户进行siwtch,也许您应该检查是否可以仅使用mkdir。