PHP: может включать файл, который file_exists () говорит, что не существует - PullRequest
2 голосов
/ 25 февраля 2010

В моем сценарии я задаю путь включения (чтобы другая часть приложения могла также включать файлы), проверял, существует ли файл, и включаю его.

Однако после того, как я установил путь включения, file_exists() сообщает, что файл не существует, но я все еще могу включить тот же файл.

<?php
  $include_path = realpath('path/to/some/directory');
  if(!is_string($include_path) || !is_dir($include_path))
  {
    return false;
  }
  set_include_path(
    implode(PATH_SEPARATOR, array(
      $include_path,
      get_include_path()
    ))
  );
  // Bootstrap file is located at: "path/to/some/directory/bootstrap.php".
  $bootstrap = 'bootstrap.php';

  // Returns "bool(true)".
  var_dump(file_exists($include_path . '/' . $bootstrap));
  // Returns "bool(false)".
  var_dump(file_exists($bootstrap));

  // This led me to believe that the include path was not being set properly.
  // But it is. The next thing is what puzzles me.

  require_once $bootstrap;
  // Not only are there no errors, but the file is included successfully!

Я могу редактировать путь включения и файлы включения без указания абсолютного пути к файлу, но не могу проверить, существуют они или нет. Это действительно раздражает, так как каждый раз, когда вызывается несуществующий файл, мое приложение приводит к фатальной ошибке или, в лучшем случае, к предупреждению (используя include_once()).

К сожалению, отключение ошибок и предупреждений не вариант.

Может кто-нибудь объяснить, что вызывает такое поведение?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

file_exists ничего не делает, кроме как говорит, существует ли файл (и скрипт может знать, что он существует), разрешая путь относительно cwd. Это не волнует путь включения.

0 голосов
/ 06 сентября 2016

Да Вот самый простой способ реализовать это

$file_name = //Pass File name 
if ( file_exists($file_name) )
            {
                echo "Exist";
            }
        else
            {
                echo "Not Exist";
            }
...