PHP: is_file () и file_exists () возвращают разные результаты для одного и того же файла - PullRequest
3 голосов
/ 11 декабря 2011

У меня проблема с тем, что 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')) возвращает содержимое файла.

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

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

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

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

Warning

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

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

UPDATE

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

ОБНОВЛЕНИЕ 2

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

2 голосов
/ 11 декабря 2011

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

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

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

...