php umask(0)目的是什么

Mar*_*ace 56 php

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

我已经看过几次,并且无法从文档中弄清楚它究竟是做什么的.

有人可以解释这个以及什么时候使用它会有用吗?

Mic*_*ski 51

设置umask0000(或仅0)意味着创建的新创建的文件或目录最初将被撤销.换句话说,a umask为零将导致所有文件被创建为0666世界可写的.目录中创建,而umask00777.

通常当您看到umask(0)它时,应该直接通过调用chmod()将新创建的文件或目录所需的权限显式设置为可写入世界之外的其他权限.

将umask设置为零时要小心! 这可能是危险的,并且当Web服务器作为"真实"用户运行而另外需要能够修改创建的文件的用户运行时,这对于创建必须稍后由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
Run Code Online (Sandbox Code Playgroud)


Sam*_*aye 5

umask 基本上是创建文件的默认设置。从本质上讲,打开默认的 chmod 然后写入文件比写入然后 chmod 更安全(有人说)。在一天结束时,完成写入文件和运行 chmod 之间的时间最多只有几毫秒,所以我对此持怀疑态度。

umask() sets PHP's umask to mask & 0777 and returns the old umask
Run Code Online (Sandbox Code Playgroud)

它基本上为您在 Linux 等操作系统上放置的任何内容设置默认写入权限,然后返回旧的权限,以便您可以将其重置。这适用于 PHP 进程本身。

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