代码之家  ›  专栏  ›  技术社区  ›  GregH

is_dir和is_file都返回false

php
  •  2
  • GregH  · 技术社区  · 12 年前

    我试图针对特定目录(在我的案例中是/home/gregh/Mail)发出并打开_dir函数,但失败了。当我使用is_dir和is_file检查目录时,它们都返回false(见下文)。我检查了目录和父目录的权限,两者都有775个权限,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_dr(“/home”)返回TRUE。

    具体来说,为什么“is_dir”函数返回false?这似乎指向某种特权问题,但我想不出是什么。有什么想法吗?

    1 回复  |  直到 12 年前
        1
  •  0
  •   Darren Cook    12 年前

    您询问了故障排除的想法,因此我将补充以下内容:

    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”权限,那么它可能无法做到这一点?

    推荐文章