我不明白为什么必须使用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。