【问题标题】:Seeing if $_SERVER["HTTP_HOST"] contains a string fails on wordpress functions.php查看 $_SERVER["HTTP_HOST"] 是否在 wordpress functions.php 上包含字符串失败
【发布时间】:2014-10-09 04:39:33
【问题描述】:

我想在我的 functions.php 上创建一个函数来检查我是在本地设置(url 是 http://macbook.local:5757/)还是实时服务器(example.com)。

这是我的代码:

$server = $_SERVER["HTTP_HOST"];
 if (strpos($server,'macbook') !== false) {
    echo 'true ';
    echo $server;
  } else {
    echo 'false ';
    echo $server;
    }

它输出:

“假 macbook.local:5757”

如果我编辑代码并输入:

//$server = $_SERVER["HTTP_HOST"];
$server = "macbook.local:5757";
 if (strpos($server,'macbook') !== false) {
    echo 'true ';
    echo $server;
  } else {
    echo 'false ';
    echo $server;
    }

我得到: “真正的 macbook.local:5757”

为什么另一个不工作而另一个工作?它们看起来像同一根弦。 我可能在这里遗漏了一些基本的东西。 我在 wp-config.php 上使用类似的设置来设置数据库凭据,具体取决于站点是本地站点还是现场站点,并且它在那里工作。

谢谢!

编辑:如果我使用

 var_dump($server);

它输出:

假字符串(17)“macbook.local:5757”

【问题讨论】:

  • 当您的第二个示例输出 true 时,再次尝试使用 var_dump($server);。还有一个风格提示,不要使用常见的strpos() !== false 解决方法,如果条件不是过度可读,则双重否定。更喜欢is_int(strpos(...)),它实际上检查整数。在你的情况下in_array() 可能更明智。
  • 谢谢! var_dump 输出这个奇怪的东西:'false-string(17) "pmb.local:5757"'

标签: php wordpress http-host


【解决方案1】:

大部分重复: 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”等。加上端口号可能在其他地方。因此,根据您正在做的事情,您可能也需要更改它。

【讨论】:

    猜你喜欢
    • 2018-08-31
    • 2011-05-29
    • 2017-09-11
    • 1970-01-01
    • 2013-12-04
    • 2012-01-22
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多