【问题标题】:php umask(0) what is the purposephp umask(0) 目的是什么
【发布时间】:2012-08-20 09:57:05
【问题描述】:

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

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

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

【问题讨论】:

标签: php


【解决方案1】:

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

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

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

doc页面上的cmets:http://php.net/manual/en/function.umask.php会举例说明。

【讨论】:

    【解决方案2】:

    umask 设置为0000(或只是0)意味着新创建的文件或目录最初不会被撤销。换句话说,umask 为零将导致所有文件创建为0666 或全局可写。在umask0 时创建的目录将为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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-12
      • 2014-02-28
      • 2018-03-04
      • 2018-06-13
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多