将umask设置为0022(或仅设置chmod()),意味着新创建的文件或目录最初不会撤销特权。 换句话说,零的umask将导致将所有文件创建为0666或可全局写入。 当umask是0时创建的目录将是0777。
通常,当您看到0022时,应直接调用chmod(),以将新创建的文件或目录上所需的权限显式设置为世界可写以外的其他权限。
将umask设置为零时请小心! 这可能很危险,并且仅在创建以后必须由Web服务器写入的文件时才有用,当Web服务器以另一个用户身份运行时,“真正的”用户也需要能够修改创建的文件 通过网络服务器。 否则,系统的默认umask可能类似于0022,可由文件所有者而非其他人写入。 在这种情况下,如果您以普通用户帐户登录到计算机,则您将无法编写由Web服务器在PHP下创建的文件。
与其创建可写世界的文件,不如通常更明智地管理Web服务器正在写入的目录。 如果在目录内创建的文件应具有某些组权限,则建议在目录上设置sgid位,以便其中的新文件继承组的所有权。 需要访问该文件的用户应该是有权访问该文件的组的成员。 这比创建世界可读,可写世界的文件安全得多。
php > umask(0);
// Should get created as 666
php > touch('file1.txt');
// "2" perms revoked from group, others, gets created as 644
php > umask(022);
php > touch('file2.txt');
// All revoked (2,4) from group, others, gets created as 600
php > umask(066);
php > touch('file3.txt');
-rw-rw-rw- 1 me group 0 Aug 24 15:34 file1.txt
-rw-r--r-- 1 me group 0 Aug 24 15:35 file2.txt
-rw------- 1 me group 0 Aug 24 15:37 file3.txt