我正在尝试使用PHP在我的服务器上创建一个目录:
mkdir("test", 0777);
但它没有提供完全权限,只有这些:
rwxr-xr-x
该模式由您当前的umask
修改,在这种情况下为022
。
umask
的工作方式是减法的。您获得mkdir
的初始许可并减去umask
以获得实际许可:
0777
- 0022
======
0755 = rwxr-xr-x.
如果您不希望发生这种情况,则需要将umask
暂时设置为零,这样就无效了。您可以使用以下代码段执行此操作:
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
第一行将umask
更改为零,同时将前一个存储到$oldmask
中。第二行使目录使用所需的权限和(现在不相关)umask
。第三行将umask
恢复到原来的状态。
创建文件和目录受umask设置的影响。您可以通过操作umask来创建具有特定权限集的文件,如下所示: -
$old = umask(0);
mkdir("test", 0777);
umask($old);
避免在多线程Web服务器中使用此功能。最好在创建文件后使用chmod()更改文件权限。
例:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);
也许,你的umask将被排除在外
对于那些尝试过的人
mkdir('path', 777);
它不起作用。
这是因为,显然,文件模式之前的0非常重要,它告诉chmod将传递的数字解释为八进制而不是十进制。
PS。这不是问题的解决方案,而只是接受的anwser的附加组件