php umask(0)的目的是什么

什么是使用umask(0);的目的umask(0); 在PHP中?

我已经看了几次,从文档中找不到它究竟做了什么。

有人可以解释这一点,什么时候可以使用?

umask设置为0000 (或仅为0 )意味着新创build的文件或目录将不具有最初被撤销的特权。 换句话说,一个零的umask将导致所有文件被创build为0666或世界可写。 在umask0时创build的目录将是0777

通常,当你看到umask(0) ,应该直接跟chmod()调用,以明确地将新创build的文件或目录所需的权限设置为世界可写以外的权限。

设置umask为零时要小心! 这可能是危险的,并且主要仅用于创build必须稍后由web服务器写入的文件,当web服务器作为不同的用户运行时,“真正的”用户也将需要能够修改所创build的文件由networking服务器。 否则,系统默认的umask很可能是像0022这样的文件,而不是文件所有者可写的。 在这种情况下,如果您以正常的用户帐户login到本机,则由PHP下的Web服务器创build的文件将不会被您写入。

而不是创build世界可写的文件,通常更好的办法是更明确地pipe理Web服务器正在写入的目录。 如果在目录中创build的文件应该具有特定的组权限,则可以build议在该目录上设置sgid位,以便其中的新文件inheritance组的所有权。 需要访问文件的用户应该是有权访问的组的成员。 这比创build世界可读的世界可写文件要安全得多。

 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 

umask基本上是创build文件的默认设置。 实质上,将默认的chmod打开然后写入文件比写它然后chmod它是安全的(有人说)。 在完成写入文件和运行chmod之间的时间最多是毫秒,所以我对此持怀疑态度。

 umask() sets PHP's umask to mask & 0777 and returns the old umask 

它基本上设置默认的写权限,无论你放在操作系统的Linux上,然后返回旧的,所以你可以重置它。 这适用于PHP进程本身。

文档页面上的评论: http : //php.net/manual/en/function.umask.php将通过示例阐明。