PHP:如何检查是否有效的CHMOD模式?

时间:2018-06-22 18:57:11

标签: php

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

$file = 'somefile.txt';
$mode = 0755;

chmod($file, $mode);

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

赞:

if (mode_is_valid($mode)) {
  chmod($file, $mode);
}

2 个答案:

答案 0 :(得分:1)

只需检查一下,mod是否在给定的数字范围内。即

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

如果您还想照顾特殊权限,则需要添加其他逻辑。

答案 1 :(得分:0)

chmod遵循经典的Unix / Linux文件模式逻辑。数字代表OCTAL的位模式!符号。共有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服务器进程应该能够读取文件,则还应避免删除第二位的读取权限。