2

在我的脚本中,我设置了包含路径(因此应用程序的另一部分也可以包含文件),检查文件是否存在并包含它。

但是,在我设置包含路径后,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())。

不幸的是,关闭错误和警告不是一种选择。

谁能解释导致这种行为的原因?

4

2 回答 2

3

file_exists仅说明文件是否存在(并且允许脚本知道它存在),解析相对于 cwd 的路径。它不关心包含路径。

于 2010-02-25T02:01:39.843 回答
0

是的,这是实现这一点的最简单方法

$file_name = //Pass File name 
if ( file_exists($file_name) )
            {
                echo "Exist";
            }
        else
            {
                echo "Not Exist";
            }
于 2016-09-06T11:07:00.200 回答