我正在尝试使用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 umask和mkdir.
Ste*_*eet 13
创建文件和目录受umask设置的影响.您可以通过操作umask来创建具有特定权限集的文件,如下所示: -
$old = umask(0);
mkdir("test", 0777);
umask($old);
Run Code Online (Sandbox Code Playgroud)
避免在多线程Web服务器中使用此功能.最好在创建文件后使用chmod()更改文件权限.
例:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);
Run Code Online (Sandbox Code Playgroud)