所以我试图检查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相关的道歉。非常感谢任何帮助!
答案 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';
}