为什么带或不带ABSPATH的FILE_EXISTS返回TRUE?

时间:2018-12-03 作者:Nabeel Khan

我一直很困惑,因为结果在这两种情况下都是真的,无论是否使用ABSPATH常量:

if (file_exists(ABSPATH . \'wp-config.php\')){
    echo "true";
}

if (file_exists(\'wp-config.php\')){
    echo "true";
}
请注意,运行此代码的文件不在根目录中(它位于wp-content/plugins 目录)。

请解释一下。还有,我更喜欢使用哪一种。

1 个回复
SO网友:Krzysiek Dróżdż

AFAIR,如果您使用file_exists 对于相对路径,您必须非常小心,因为路径是相对于请求调用的脚本的,而不是相对于包含该检查的文件的。。。

因此,如果它是一个插件,并且请求转到主WP索引。php,然后您将在WP root中查找一个文件。

但是,如果AJAX调用(wp admin/admin AJAX.php)将运行相同的代码,它将在wp admin目录中搜索该文件。

这就是为什么你应该使用ABSPATH 或使用__DIR__ (使路径相对于检查文件存在的文件)。

相关推荐

static array on functions.php

在函数中。php中,我想访问数据库一次,以获取一个ACF对象,然后在本地“保存”它,以防止对数据库的进一步请求。我想首先在“init”钩子中调用以下函数。然后,假设,当我在以后的挂钩上调用它时,由于使用了“static”关键字,$current\\u store var已经设置好了,函数将在第一个“if”返回已经保存的静态var时停止。它不起作用-当访问稍后挂钩上的函数时,“isset($current\\u store)”返回false。我做错了什么?function get_current_store