PHP: is_file () и file_exists () возвращают разные результаты в одном файле

У меня проблема, когда file_exists возвращает false, а is_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) } 

Я предполагаю, что я сделал что-то неправильно в конфигурации, но не совсем понял, что это такое.

Что еще более интересно, так это то, что несмотря на то, что file_exists не работает fread(fopen('/home/www/public_html/index.html','r'), filesize('/home/www/public_html/index.html')) верните содержимое файла.

Странно, вот несколько вариантов проверки из руководства:

 Note: The results of this function are cached. See clearstatcache() for more details. 

Или это может быть:

 Warning 

Эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима. Однако эти файлы могут быть включены, если они находятся в safe_mode_include_dir.

Это единственное, что я могу думать о том, что это могло бы произвести это. Не уверен, что вы пробовали это или нет, но стоит того.

ОБНОВИТЬ

Как насчет флагов файла? Из оболочки (если у вас есть доступ к оболочке) вы можете сделать ls -alh /home/www/public_html | grep index.html ls -alh /home/www/public_html | grep index.html и убедитесь, что флаг не задан на нем странным?

ОБНОВЛЕНИЕ 2

Проблема в том, что права доступа к каталогу были установлены таким образом, чтобы владелец не смог просмотреть содержимое каталога. Это объясняется далее в комментариях

См. Предупреждение в file_exists() :

Эта функция возвращает FALSE для файлов, недоступных из-за ограничений безопасного режима. Однако эти файлы могут быть включены, если они находятся в safe_mode_include_dir .

Функция is_file() , похоже, не имеет этого ограничения.