查看$ _SERVER [" HTTP_HOST"]是否在wordpress functions.php上包含字符串失败

时间:2014-08-15 12:35:48

标签: php wordpress http-host

我想在我的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”

1 个答案:

答案 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”等。再加上端口号可能在其他地方。因此,根据您的操作,您可能还需要更改它。