mkdir权限将不起作用

我不明白为什么我必须使用chmod来获得正确的权限..该文件已成功创build,但0755而不是0775,我在mkdir指定。

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

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

安全模式在php.ini中是closures的,并且该文件夹属于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); } 

Solutions Collecting From Web of "mkdir权限将不起作用"

是的,这是因为umask …

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

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

mkdir($ dir,0777);

创建的文件夹实际上拥有0755的权限,而不是指定的0777.为什么这是你问的? 由于umask(): http : //www.php.net/umask

至少在我的设置中,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()的manpage,其中一条评论列出了我内心的想法:

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

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

设置您的umask,以便文件被创建为您的用户私有,然后使用chmod来打开它们。

尝试在创建目录之前调用此函数:clearstatcache(); 此外,也许你应该检查,如果你可以做到这一点,只是mkdir如果你siwtch其他用户。