17

如何检查,而不必通过orfile permissions运行操作系统特定的命令?passthru()exec()

4

5 回答 5

22

使用fileperms()函数

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);
于 2008-08-21T08:10:44.817 回答
12

您可以使用is_readable()is_executable()等命令。

于 2008-08-21T08:09:46.720 回答
6

真正的编码人员使用按位操作,而不是字符串;)这是处理权限的更优雅的方式:

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}
于 2013-04-18T13:12:17.670 回答
1

使用fileperms()函数和子字符串:

substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777

对于文件:

substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644

用您的路径或变量替换__FILE____DIR__

于 2012-07-11T13:58:25.497 回答
0

你想通过检查文件权限来做什么?

在编写安全代码时,“检查​​,然后执行”任何事情几乎总是不正确的。原因是在检查你是否可以做某事和实际做某事之间,系统的状态可能会发生变化,以至于做它会产生不同的结果。

例如,如果您在写入之前检查文件是否存在,请不要检查您是否写入文件成功(或不要检查足够详细的方式),然后取决于您写入的文件的内容,您实际上可能正在读取攻击者编写的文件。

因此,与其检查文件权限,不如在权限检查成功时做任何你想做的事情,并优雅地处理错误。

于 2008-08-21T08:09:41.993 回答