我正在尝试针对特定目录(在我的情况下是/ home / gregh / Mail)发出open_dir函数,但是它失败了。当我使用is_dir和is_file检查目录时,它们都返回false(请参见下文)。我检查了目录和父目录的权限,并且都具有775 privs和apache用户,甚至具有与目录所有者相同的组成员身份。
print("DEBUG - dir = self::SBD_ROOT_PATH = " . self::SBD_ROOT_PATH . " <P>");
print("DEBUG - is_dir(self::SBD_ROOT_PATH) = ");
var_dump(is_dir(self::SBD_ROOT_PATH));
print("DEBUG - is_file(self::SBD_ROOT_PATH) = ");
var_dump(is_file(self::SBD_ROOT_PATH));
这将产生以下输出:
DEBUG - dir = self::SBD_ROOT_PATH = /home/gregh/Mail
DEBUG - is_dir(self::SBD_ROOT_PATH) = bool(false)
DEBUG - is_file(self::SBD_ROOT_PATH) = bool(false)
以下是一些目录设置信息:
[gregh@proteus ~]$ whoami
gregh
[gregh@proteus ~]$ groups
gregh apache admin
[gregh@proteus ~]$ ls -l /home/gregh
drwxrwxr-x. 6 gregh admin 4096 Mar 1 11:46 Mail
然后,我向“ apache用户”致敬:
-bash-4.1$ whoami
apache
-bash-4.1$ groups
apache admin
-bash-4.1$ ls /home/gregh/Mail
7012 7052 email_backup Errors float_data sbd
我还添加了检查以查看:is_dir(“ / home / gregh”)返回和is_dir(“ / home”)返回。有趣的是,is_dir(“ / home / gregh”)返回FALSE,而is_dir(“ / home / gregh”)返回TRUE。
具体来说,为什么“ is_dir”函数返回false?这似乎指向某种特权问题,但我不知道这是什么。有任何想法吗?
您询问了故障排除的想法,所以这些是我要添加的其他功能:
clearstatcache();
echo file_exists(self::SBD_ROOT_PATH);
print_r(fstat(self::SBD_ROOT_PATH));
shell_exec('getfacl '.escapeshellarg(self::SBD_ROOT_PATH));
某些版本的Linux上的ACL权限以前已经困扰我了,这就是最后一行的内容。
需要注意的另一件事是Apache / PHP必须到达您的目录。如果它对以上所有目录都没有至少“ rx”权限,那么也许它不能走得那么远?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句