代码之家  ›  专栏  ›  技术社区  ›  MultiDev

php:如何检查chmod模式是否有效?

php
  •  1
  • MultiDev  · 技术社区  · 7 年前

    我可以使用设置文件权限 chmod :

    $file = 'somefile.txt';
    $mode = 0755;
    
    chmod($file, $mode);
    

    如何检查模式是否有效?似乎进入随机模式会真正扰乱文件权限。

    像:

    if (mode_is_valid($mode)) {
      chmod($file, $mode);
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Philipp    7 年前

    只要检查一下,如果mod在给定的数字范围内。即。

    function mode_is_valid($mode) {
        if (is_string($mode)) {
            $mode = octdec($mode);
        }
        return $mode >= 0 && $mode <= 0777;
    }
    

    如果还需要考虑特殊权限,则需要添加其他逻辑。

        2
  •  0
  •   maba    7 年前

    chmod遵循经典的unix/linux文件模式逻辑。这个数字用八进制表示一个位模式!符号!有9位用于读/写/执行加上一些特殊的附加标志,如所有权继承(所谓的S位)…

    9位的顺序是:

    3 bits for "owner" of the file / link / directory
    3 bits for "group" of the file / link / directory
    3 bits for the rest of the world
    

    单个位表示

    READ permission
    WRITE permission
    EXECUTE permission
    

    例子

    READ (1) WRITE (1) EXEC (1) = binary 111 = octal 7
    READ (1) WRITE (1) EXEC (0) = binary 110 = octal 6
    READ (1) WRITE (0) EXEC (0) = binary 100 = octal 4
    

    以上三种组合是最常见的。read+exec=5也很常见。目录上需要exec以允许目录列表。

    在windows上,这是在底层文件系统允许的情况下模拟的。

    因此,请避免任何删除所有者读取文件权限的操作。如果web服务器uid不是所有者,但组和web服务器进程应该能够读取该文件,还应避免删除第二个数字中的读取权限。

    推荐文章