php umask(0)的目的是什么
什么是使用umask(0);
的目的umask(0);
在PHP中?
我已经看了几次,从文档中找不到它究竟做了什么。
有人可以解释这一点,什么时候可以使用?
将umask
设置为0000
(或仅为0
)意味着新创build的文件或目录将不具有最初被撤销的特权。 换句话说,一个零的umask
将导致所有文件被创build为0666
或世界可写。 在umask
为0
时创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将通过示例阐明。