0

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

4

1 回答 1

0

大部分重复: PHP:$_SERVER 变量:$_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”等。加上端口号可能在其他地方。所以根据你在做什么,你可能也需要改变它。

于 2019-05-23T20:43:35.603 回答