将umask 设置为0000(或只是0)意味着新创建的文件或目录最初不会被撤销。换句话说,umask 为零将导致所有文件创建为0666 或全局可写。在umask 为0 时创建的目录将为0777。
通常,当您看到umask(0) 时,应直接调用chmod() 以明确将新创建的文件或目录所需的权限设置为非全局可写的权限。
在将 umask 设置为零时要小心! 这可能很危险,并且主要只对创建稍后必须由 Web 服务器写入的文件有用,当 Web 服务器以不同的方式运行时user 是一个“真正的”用户,他还需要能够修改由 Web 服务器创建的文件。否则,系统默认的 umask 很可能是 0022 之类的东西,可由文件所有者写入,但不能由其他人写入。在这种情况下,如果您以普通用户帐户登录机器,则在 PHP 下由 Web 服务器创建的文件将不您可以写入。
与其创建全局可写文件,不如更明确地管理 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