在FrogCms中找到这段代码
function isWritable($file=null) {
$perms = fileperms($file);
if (is_writable($file) || ($perms & 0x0080) || ($perms & 0x0010) || ($perms & 0x0002))
return true;
}
我很难理解这部分
(is_writable($file) || ($perms & 0x0080) || ($perms & 0x0010) || ($perms & 0x0002))
在做了一些研究后,我知道0x0080
是对所有者的权限,0x0010
是对群组的权限,0x0002
是对其他人的权限。这个值是否会形成?这是许可系统的预定值吗?
有人可以向我解释一下$perms & 0x0080
如何解析为真,例如fileperms(__FILE__)
返回一个像33206这样的值。你好吗?
将33206与0x0080进行比较?
答案 0 :(得分:3)
您引用的常量(0x0080
等)没有您认为的确切含义。请参阅fileperms
文档:
0x0080 = owner writable
0x0010 = group writable
0x0002 = world writable
另外,您不是比较,而是在执行bitwise AND。
1000000110110110 = 33206 (dec)
0000000010000000 = 0x80 (hex)
AND ------------------------
0000000010000000 = result (bin)
由于结果不为零,这意味着特定文件是所有者可写的。
但您提供的代码是做什么的?
当且仅当该文件可由以下任何写入时,它才会返回true
:
is_writable
检查)这对我来说当然看起来像不合逻辑和错误,因为例如:
true
;但是,这肯定并不意味着该文件对于你是可写的,除非你是所有者!is_writable
检查将是多余的,至少令人困惑。答案 1 :(得分:2)
这个值来自哪里?
它们是权限位的十六进制等效值,通常以八进制指定。
这是许可系统的预定值吗?
有人可以向我解释一下
$perms & 0x0080
如何解析为true,例如fileperms(__FILE__)
返回一个类似33206的值
>>> hex(33206)
'0x81b6'
>>> 0x81b6 & 0x0080
128
非零值为真。