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

Sjw*_*ies 56 php mkdir

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

mkdir("test", 0777);
Run Code Online (Sandbox Code Playgroud)

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

rwxr-xr-x
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 138

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

umask作品的方式是减法的.您获取给予的初始权限mkdir并减去umask以获得实际权限:

  0777
- 0022
======
  0755 = rwxr-xr-x.
Run Code Online (Sandbox Code Playgroud)

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

$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
Run Code Online (Sandbox Code Playgroud)

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

有关更多详细信息,请参阅PHP doco for umaskmkdir.


Ste*_*eet 13

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

$old = umask(0);
mkdir("test", 0777);
umask($old);
Run Code Online (Sandbox Code Playgroud)


Sta*_*uzh 6

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

例:

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

mkdir($dir);
chmod($dir, $permit);
Run Code Online (Sandbox Code Playgroud)