$ _SERVER [' SERVER_NAME']

时间:2015-09-03 21:48:25

标签: php apache codekit server-name

所以我试图检查Apache服务器名称是否包含某个字符串,并注意到非常奇怪的行为(例如,if语句中没有匹配,即使字符串看起来完全匹配)。使用var_dump()我查看了包含服务器名称的变量,令我惊讶的是我看到了:

string(11) "test.local:5757"

如果您不计算数字,字符串只有11个字符。如果我使用'test.local:5757'而不是$_SERVER['SERVER_NAME']声明变量,我会得到正确的长度,15。

我尝试将一个空字符串添加到“#34; reset"字符串,我甚至尝试在字符串上添加额外的字母,最终得到计数,但5757仍未计算在内。

有没有人经历过这样的事情?

编辑:对不起,发布后发现我没有包含足够的信息。

我遗漏的一个主要细节是我在MAMP之上使用CodeKit。我的本地MAMP安装位于localhost,我的CodeKit项目的网址为test.local:5757'。但是,当我回显声明为$_SERVER['SERVER_NAME']的变量时,确实会出现5757端口。更奇怪的是回显$_SERVER['SERVER_NAME'] . ':' $_SERVER['SERVER_PORT']打印test.local:5757,同时将冒号更改为任何其他字符,例如$_SERVER['SERVER_NAME'] . '>' $_SERVER['SERVER_PORT'],打印test.local:5757>80

以下是我看到的更多示例:

$host = $_SERVER['SERVER_NAME'];
echo $host;
// prints 'test.local:5757'


$host = $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'];
echo $host;
// prints 'test.local:5757'


$host = $_SERVER['SERVER_NAME'] . '&' . $_SERVER['SERVER_PORT'];
echo $host;
// prints 'test.local:5757&80'


$host = $_SERVER['SERVER_NAME'];
echo $host;
// prints 'test.local:5757'
$bool = false;
if ($host == 'test.local:5757') $bool = true;
echo $bool;
// prints false;


$host = $_SERVER['SERVER_NAME'];
var dump($host);
// prints string(11) test.local:5757

没有标记为与CodeKit相关的道歉。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这里有一个很好的解释https://github.com/bdkjones/CodeKit/issues/440

结尾
  

简而言之,这里没有错 - > MAMP具有正确的主机头。

由于您尝试区分test.local和localhost,因此可以使用:

if (strpos($_SERVER['HOST_NAME'],'localhost') !== false) {
    echo 'localhost';
} else {
    echo 'not localhost';
}