检查文件权限


14

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

17

使用fileperms()功能

clearstatcache(); 
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4); 

0

你想干什么通过检查文件的权限吗?

在编写安全的代码,它几乎总是不正确的“检查,然后做”任何事情。原因是在检查你是否可以做某件事情并且真正做到它之间,系统的状态可能会发生变化,因此这样做会产生不同的结果。

例如,如果你检查是否写一个前一个文件存在,不检查是否成功写的文件(或不详细,够时尚检查),再后来取决于内容您写的文件,实际上您可能正在读取攻击者写入的文件。

因此,而不是检查文件的权限,只是做不管它是什么,你打算做的,如果权限检查成功,并妥善处理错误。

+1

总有一些可行的原因,检查权限,也许他建立一个守护进程固定的权限,这没有按”不要依赖他的脚本来读取或写入文件,因为不同的过程将会这样做。 20 5月. 112011-05-20 14:44:56

+1

另一个例子是一个rewriteMap程序,它作为基于某些文件权限的门。 21 3月. 122012-03-21 16:45:08


11

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

+1

请注意,is_writable()不检查组成员资格(自PHP 5.5.18开始)。 12 11月. 142014-11-12 22:30:01


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__与路径或变量


6

真实编码器使用位运算,而不是字符串;)这是更优雅的处理权限的方式:

function checkPerms($path) 
{ 
    clearstatcache(null, $path); 
    return decoct(fileperms($path) & 0777); 
} 
  0

这是什么回报,是/否? 06 5月. 142014-05-06 16:08:09