使用file_exists并启用safe_mode

时间:2012-07-03 21:32:38

标签: php webserver

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

我的服务器在php.ini中配置了safe_mode = on。因此,我添加了包含我想要使用

检查的文件的目录
include_path=".:/path/to/dir"

我还添加了

的路径
safe_mode_include_dir = /path/to/dir

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

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您有能力这样做,请停用safe_mode。它已被PHP开发团队弃用,并且从PHP 5.4.0开始不再使用,因此您迟早需要停止依赖它。

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

答案 1 :(得分: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;

}

......但是它在很多方面都是如此令人讨厌,而且我绝对会推荐这种做法。