PHP:is_file()和file_exists()在同一个文件上返回不同的结果

PHP:is_file()和file_exists()在同一个文件上返回不同的结果,php,file-exists,Php,File Exists,我遇到了一个问题,其中file\u exists返回false,is\u file返回true echo(getmygid()." = gid\n"); //501 echo(getmyuid()." = uid\n"); //501 echo(posix_getgid()." = pgid\n"); //501 echo(posix_getuid()." = puid\n"); //501 var_dump(file_exists("/home/www/public_html/")); //b

我遇到了一个问题,其中file\u exists返回false,is\u file返回true

echo(getmygid()." = gid\n"); //501
echo(getmyuid()." = uid\n"); //501
echo(posix_getgid()." = pgid\n"); //501
echo(posix_getuid()." = puid\n"); //501
var_dump(file_exists("/home/www/public_html/")); //bool(true)
var_dump(file_exists("/home/www/public_html/index.html")); //bool(false)
var_dump(is_file("/home/www/public_html/index.html")); //bool(true)

var_dump(stat("/home/www/public_html/index.php")); 
输出为:

501 = gid
501 = uid
501 = pgid
501 = puid
bool(true)
bool(false)
bool(true)
array(26) {
  [0]=>
  int(51712)
  [1]=>
  int(58055)
  [2]=>
  int(33197)
  [3]=>
  int(1)
  [4]=>
  int(501)
  [5]=>
  int(501)
  [6]=>
  int(0)
  [7]=>
  int(473)
  [8]=>
  int(1323573973)
  [9]=>
  int(1323573973)
  [10]=>
  int(1323574039)
  [11]=>
  int(4096)
  [12]=>
  int(8)
  ["dev"]=>
  int(51712)
  ["ino"]=>
  int(58055)
  ["mode"]=>
  int(33197)
  ["nlink"]=>
  int(1)
  ["uid"]=>
  int(501)
  ["gid"]=>
  int(501)
  ["rdev"]=>
  int(0)
  ["size"]=>
  int(473)
  ["atime"]=>
  int(1323573973)
  ["mtime"]=>
  int(1323573973)
  ["ctime"]=>
  int(1323574039)
  ["blksize"]=>
  int(4096)
  ["blocks"]=>
  int(8)
}
我想我在配置中做错了什么,但还没有完全弄清楚是什么

更令人兴奋的是,尽管文件不存在
fread(fopen('/home/www/public\u html/index.html','r'),但文件大小('/home/www/public\u html/index.html'))
确实返回了文件的内容。

请参见以下警告:

对于由于安全模式限制而无法访问的文件,此函数返回
FALSE
。但是,如果这些文件位于
safe\u模式\u include\u dir
中,则仍然可以包含它们


该功能似乎没有此限制。

奇怪的是,这里有几个选项可以从手册中检查:

或者这可能是:

对于由于安全模式限制而无法访问的文件,此函数返回FALSE。但是,如果这些文件位于安全模式下,则仍然可以包含它们

这些是我能想到的唯一可能影响它的事情。不确定你是否尝试过,但值得一试

更新


文件标志如何?从shell(如果您有shell访问权限)可以执行
ls-alh/home/www/public_html | grep index.html
,并确保没有在其上设置标志吗

更新2


问题是设置了目录权限,因此所有者无法查看目录内容。根据phpinfo()safe_mode Off Off clearstatcache()未更改结果,注释中进一步解释了这一点。正确,它不是符号链接。文件标志如何?从shell(如果你有shell访问权限)你能做一个
ls-alh/home/www/public_html | grep index.html
并确保没有设置奇怪的标志吗?我已经用83886-rwxrwx 1 www.6K等试过了。。。这是777,但我也尝试了766和655(从上面复制)布拉德,我终于得到了!我不确定我是否完全理解这是为什么,但希望你能帮助我。public_html目录具有drw-r-xr-x权限,但所有者需要x权限才能允许文件_exists处理其内容。既然public_html目录中有drwxr-xr-x,那么一切都正常工作了。我还有一个问题,也许你可以帮助解决:用户“www”也是组“www”的一部分,文件的所有者和组也是“www”,那么为什么拥有这些权限的所有者不能查看目录内容?你在错误的文件上发布了统计信息,你能更正吗?所有这些目录(主页,www,public_html)已为此脚本启用了读取权限?它们都是目录,而不是符号链接吗?是的。我的错。刚刚修复了它。它是空的。并且是655模式。没有符号链接。主页目录是766 www是drwxrwxr-x public_html是drw-r-xr-x。stat是用于index.php的,它应该是php还是html?
Note: The results of this function are cached. See clearstatcache() for more details.
Warning