我正在尝试检查服务器上是否存在文件。我遇到的困难是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。
提前致谢
答案 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;
}
......但是它在很多方面都是如此令人讨厌,而且我绝对会不推荐这种做法。