我无法理解为什么必须使用chmod
来获取正确的权限。
该文件已成功创建,但我在mkdir
中指定了0755而不是0775。
(http://php.net/manual/en/function.mkdir.php)
我必须在chmod
之后mkdir
设置正确的权限。
安全模式在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);
}
答案 0 :(得分:39)
是的,这是因为umask ......
来自文档的评论:http://php.net/manual/en/function.mkdir.php
您可能会注意到在创建时 使用此代码的新目录:
mkdir($ dir,0777);
创建的文件夹实际上有 0755的权限,而不是 规定 你为什么这么问?因为umask():http://php.net/manual/en/function.umask.php
至少是umask的默认值 在我的设置,是18.这是22八进制, 要么 0022.这意味着当您使用mkdir()将CHMOD创建的文件夹添加到 0777,PHP需要0777和substracts umask的当前值,在我们的 案例0022,结果是0755 - 这不是你想要的, 可能。
对此的“修复”很简单,包括 这一行:
$ old_umask = umask(0);
在创建文件夹之前 mkdir()拥有你的实际价值 把它用作CHMOD。如果你能 喜欢将umask恢复到原来的状态 完成后的价值,请使用:
的umask($ old_umask);
答案 1 :(得分:1)
我认为您可能需要修改您的umask。
正如mkdir联机帮助页上所述:
该模式也由当前的umask修改,您可以使用umask()更改。
现在,查看umask()联机帮助页,其中一条评论确认了我内心的想法:
“最好在创建文件后使用chmod()更改文件权限。”
换句话说,我相信你这样做的方式更安全:
设置您的umask,以便为您的用户创建私有文件,然后使用chmod打开它们。
答案 2 :(得分:0)
在创建目录之前尝试调用此函数:clearstatcache();另外,如果你选择了另一个用户,也许你应该检查一下你是否可以使用mkdir。