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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (59)

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

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

chmod($file, $mode);

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

喜欢:

if (mode_is_valid($mode)) {
  chmod($file, $mode);
}
提问于
用户回答回答于

如果mod在给定的数字范围内,请检查。即

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

如果您还需要关注特殊权限,则需要添加其他逻辑。

用户回答回答于

chmod遵循经典的Unix / Linux文件模式逻辑。这个数字代表了OCTAL的一些模式!符号。有9位用于读/写/执行加上一些额外的标志,用于特殊处理,如所有权继承(所谓的S-Bit)......

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服务器进程应该能够读取该文件,则还要避免删除第二个数字中的读取权限。

扫码关注云+社区

领取腾讯云代金券