1

我正在尝试检查服务器上是否存在文件。我遇到的困难是file_exists对于我知道服务器上存在的文件返回 false 。

我的服务器safe_mode = on在 php.ini 中配置。因此,我添加了包含我要检查使用的文件的目录

include_path=".:/path/to/dir"

我还添加了路径

safe_mode_include_dir = /path/to/dir

file_exists("/path/to/dir/file")仍然返回 FALSE。

提前致谢

4

2 回答 2

2

如果您有能力这样做,请禁用safe_mode. 它已被 PHP 开发团队弃用,并且自 PHP 5.4.0 起已消失,因此您迟早需要停止依赖它。

如果必须使用safe_mode,请将目录添加到open_basedir,而不是include_path.

于 2012-07-03T22:46:44.160 回答
1

抱歉,但无法绕过安全模式限制——这就是安全模式的意义所在。如果您想包含该文件,如果您设置了一个允许访问它的路径,您仍然可以这样做safe_mode_include_dir,但是没有办法让stat()相关函数使用它。

编辑

一个可怕且极其危险且不可靠的解决方法可能是:

function file_exists_safemode ($file) {

  $oldErrorLevel = error_reporting(E_ALL);
  $oldDisplayErrors = ini_get('display_errors');
  ini_set('display_errors', 1);

  ob_start();
  include $file;
  $result = ob_get_clean();

  ini_set('display_errors', $oldDisplayErrors);
  error_reporting($oldErrorLevel);

  return strpos($result, 'failed to open stream') === FALSE;

}

...但它在很多方面都很讨厌,我绝对推荐这种方法。

于 2012-07-03T22:24:55.530 回答