以下是代码:
if (isset($_SERVER['HTTP_HOST']) === TRUE) {
$host = $_SERVER['HTTP_HOST'];
}
如何在if语句内的行上获得"未定义索引HTTP_HOST"?我的意思是,索引设置在使用之前已经过检查。
为什么HTTP_HOST有时不能设置?
您正在使用PHP-CLI吗?
HTTP_HOST仅适用于浏览器。
一个糟糕的浏览器可以省略发送que主机头信息,请尝试以下示例:
telnet myphpserver.com 80
> GET / <enter><enter>
在这种情况下,$_SERVER['HTTP_HOST']没有分配值,在这种情况中,u可以使用$_SERVER['SERVER_NAME'],但前提是$_SERVER['HTTP_HOST']为空,因为没有相同的值。
如果在浏览器上运行,则必须始终设置HTTP_HOST。。。那么就没有必要检查。。。简单地说,
$host = $_SERVER['HTTP_HOST'];
是否足够
我通常会省略=== TRUE
,因为这里不需要它,因为isset()
返回布尔值,但这不应该阻止代码工作。
我还将$host设置为合理的默认值(取决于您的应用程序),然后再if语句。我有一条一般规则,如果以后要引用条件,就不要在条件中引入新变量。
$host = FALSE; // or $host = ''; etc. depending on how you'll use it later.
if (isset($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
}
当使用空主机完成请求时:
GET / HTTP/1.1
Host:
那么isset($_SERVER['HTTP_HOST'])为true!
最好使用空像:
$host = '';
if (!empty($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
}
有关详细信息,请查看此处https://shiflett.org/blog/2006/server-name-versus-http-host