4

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

string(11) "test.local:5757"

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

我尝试在末尾附加一个空字符串以“重置”字符串,我什至尝试在字符串上添加额外的字母,这些字母最终被计算在内,但 5757 仍未计算在内。

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

编辑:对不起,发布后我没有提供足够的信息。

我遗漏的一个主要细节是我在 MAMP 之上使用 CodeKit。我的本地 MAMP 安装位于,localhost我的 CodeKit 项目的 URL 是test.local:5757'. 但是,当我回显一个声明为$_SERVER['SERVER_NAME']. 更奇怪的是,在将冒号更改为任何其他字符(例如$_SERVER['SERVER_NAME'] . ':' $_SERVER['SERVER_PORT']prints )时,会回显prints 。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 相关。非常感谢任何帮助!

4

1 回答 1

1

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

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

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

if (strpos($_SERVER['HOST_NAME'],'localhost') !== false) {
    echo 'localhost';
} else {
    echo 'not localhost';
}
于 2015-09-04T01:11:57.910 回答