63

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

我已经看过几次了,但无法从文档中弄清楚它到底做了什么。

有人可以解释一下,什么时候有用吗?

4

2 回答 2

56

设置umaskto 0000(或只是0)意味着新创建的文件或创建的目录将没有最初撤销的权限。换句话说,aumask为零将导致所有文件被创建为0666或世界可写。umask在is时创建的目录0将是0777.

通常,当您看到umask(0)它之后应该直接调用 tochmod()以将新创建​​的文件或目录所需的权限显式设置为非全局可写的权限。

将 umask 设置为零时要小心! 这可能很危险,并且仅对创建稍后必须由 Web 服务器写入的文件有用,当 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
于 2012-08-24T20:33:54.313 回答
5

umask 基本上是创建文件的默认设置。从本质上讲,打开默认 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将通过示例进行说明。

于 2012-08-24T20:33:08.747 回答