PHP有一个is_readable函数,用于检查脚本所有者是否可以读取该文件。是否有相应的脚本来查看指定用户是否可以读取文件,例如
is_readable('Gavrilo Princip', 'black_hand.srj')
答案 0 :(得分:2)
没有内置。我甚至不认为有一个命令行实用程序可以检查某个用户是否具有对文件的读取权限。
您可以编写自己的函数来进行检查。查看fileperms(),fileowner(),filegroup()和posix_getpwuid()函数。
答案 1 :(得分:1)
检查此问题 Check file permissions
PHP fileperms http://php.net/manual/en/function.fileperms.php
PHP stat http://www.php.net/manual/en/function.stat.php
其中的例子适用于* nix系统。我不知道它是否会在Windows主机上运行相同。通过这些,您可以获得文件的GID和UID。
我不知道是否有一个PHP等价物可以让你获得特定系统用户的UID和/或GID。您可能需要手动获取并搜索这些值。您可以在/ etc / passwd文件中找到该值
答案 2 :(得分:0)
感谢Chris和AndrewR的帮助,我提出了一个尚未经过测试的解决方案。此解决方案在shell中实现,并等待来自标准的输入(旨在与Apache RewriteMap一起使用)。但是,可以轻松地修改它以从命令行或PHP脚本调用。它有点复杂,因为我们正在将函数(getfacl
)的输入传递给while
循环。当我们这样做时,它会启动一个新的suprocess,因此在这个循环中声明或更新的任何变量(即。result
)都不会对外界可用。此外,我使用了getfacl
,因为我稍后可以将其扩展为也可以使用ACL权限。最后,出于实现原因,我在调用此脚本之前已经知道文件的所有者(user
),但是,如果不是这种情况,可以从getfacl
命令轻松找到它。 / p>
#!/bin/bash
#USAGE: STDIN viewer:user:file
while read line
do
viewer=`echo $4 | cut -d ':' -f 1`
user=`echo $4 | cut -d ':' -f 2`
file=`echo $4 | cut -d ':' -f 3`
result=$(
getfacl $file 2>/dev/null | while read line
do
if [[ $user == $viewer ]] && [[ $line =~ ^user: ]]
then
permissions=`echo $line | cut -d ':' -f 3`
if [[ $permissions =~ r ]]
then
echo true
break
fi
elif [[ $user == $viewer ]] && [ $line =~ ^group: ]]
then
#NOTE: I take advantage of the fact that each user has one single group and that group has the same name as the user's name
permissions=`echo $line | cut -d ':' -f 3`
if [[ $permissions =~ r ]]
then
echo true
break
fi
elif [[ $line =~ ^other: ]]
then
permissions=`echo $line | cut -d ':' -f 3`
if [[ $permissions =~ r ]]
then
echo true
break
fi
fi
done
)
if [[ $result == "true" ]]
then
echo true
else
echo false
fi
done