使用mkdir的权限不起作用

Par*_*kos 25 php linux

我无法理解为什么我必须使用chmod才能获得正确的权限..文件是成功创建的,但是我指定的是0755而不是0775 mkdir.

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

  }
Run Code Online (Sandbox Code Playgroud)

但这样做:

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

  }
Run Code Online (Sandbox Code Playgroud)

con*_*fiq 41

是的,这是因为umask ...

来自docs的评论: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);

  • 所以chmod不受umask的影响? (3认同)