我想在我的functions.php上创建一个函数,用于检查我是在本地设置(url是http://pmb.local:5757/)还是实时服务器(example.com)。
这是我的代码:
$server = $_SERVER["HTTP_HOST"];
if (strpos($server,'pmb') !== false) {
echo 'true ';
echo $server;
} else {
echo 'false ';
echo $server;
}
输出:
“false pmb.local:5757”
如果我编辑代码并放入:
//$server = $_SERVER["HTTP_HOST"];
$server = "pmb.local:5757";
if (strpos($server,'pmb') !== false) {
echo 'true ';
echo $server;
} else {
echo 'false ';
echo $server;
}
我得到: “真的pmb.local:5757”
为什么另一个在另一个不工作时有效?它们看起来像是一个字符串。 我可能在这里错过了一些基本的东西。 我在wp-config.php上使用类似的设置来设置数据库凭据,具体取决于该站点是本地还是现场,并且它在那里工作。
谢谢!
编辑:如果我使用
var_dump($server);
输出:
false-string(17)“pmb.local:5757”
答案 0 :(得分:0)
大部分重复: PHP: $_SERVER variables: $_SERVER['HTTP_HOST'] vs $_SERVER['SERVER_NAME']
如您的代码所示,这些并不总是等效的。参见:
https://www.php.net/manual/en/reserved.variables.server.php
通知$_SERVER
始终设置为不; HTTP_HOST
之类的元素也没有。这就是为什么您应该首先检查isset($_SERVER['HTTP_HOST'])
的原因。也建议使用strpos
。否则,异常处理可能会返回FALSE
,不是因为主机名是prod,而是因为它是未知的,空字符串或列表中的值。这不是您想要的结果。
一个小警告:$_SERVER['HTTP_HOST']
是客户端的HTTP请求中出现的内容,Host:
标头,例如“ www.example.com:4443”。您的浏览器发送了。 不一定与服务器上的$_SERVER['SERVER_NAME']
或其他环境变量相同。取决于负载平衡器和虚拟主机之类的内容,后端配置(Apache等)中的主机名可以是“ www20”或“ localhost”等。再加上端口号可能在其他地方。因此,根据您的操作,您可能还需要更改它。