为什么PHP不能创建具有777权限的目录?

时间:2010-10-22 14:12:00

标签: php mkdir

我正在尝试使用PHP在我的服务器上创建一个目录:

mkdir("test", 0777);

但它没有提供完全权限,只有这些:

rwxr-xr-x

6 个答案:

答案 0 :(得分:131)

该模式由您当前的umask修改,在这种情况下为022

umask的工作方式是减法的。您获得mkdir的初始权限并减去umask以获得实际权限:

  0777
- 0022
======
  0755 = rwxr-xr-x.

如果您不希望发生这种情况,则需要暂时​​将umask设置为零,以使其无效。您可以使用以下代码段执行此操作:

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);

第一行将umask更改为零,同时将前一个存储到$oldmask。第二行使目录使用所需的权限(现在不相关)umask。第三行将umask恢复为原来的状态。

有关详细信息,请参阅PHP doco了解umaskmkdir

答案 1 :(得分:13)

创建文件和目录受umask设置的影响。您可以通过按如下方式操作umask来创建具有特定权限集的文件: -

$old = umask(0);
mkdir("test", 0777);
umask($old);

答案 2 :(得分:5)

避免在多线程Web服务器中使用此功能。在创建文件后,最好使用chmod()更改文件权限。

示例:

$dir = "test";
$permit = 0777;

mkdir($dir);
chmod($dir, $permit);

答案 3 :(得分:2)

可能您的umask设置为排除

答案 4 :(得分:0)

对于那些尝试过的人

mkdir('path', 777);

它不起作用。

这是因为,显然,文件模式之前的0非常重要,它告诉chmod将传递的数字解释为八进制而不是十进制。

Reference

聚苯乙烯。这不是问题的解决方案,而只是接受的anwser

的附加组件

答案 5 :(得分:0)

对于我来说,我必须对centos7使用以下方法,从而解决了问题

$oldmask = umask(000);//it will set the new umask and returns the old one 
mkdir("test", 0777);
umask($oldmask);//reset the old umask

更多详细信息,请参见 https://www.php.net/manual/en/function.umask.php