[英]Undefined index HTTP_HOST even though it is checked
这是代码:
if (isset($_SERVER['HTTP_HOST']) === TRUE) {
$host = $_SERVER['HTTP_HOST'];
}
如何在 if 语句内的行上获得“未定义索引 HTTP_HOST”? 我的意思是,在使用之前检查索引设置。
为什么有时不设置 HTTP_HOST ?
你在使用 PHP-CLI 吗?
HTTP_HOST 仅适用于浏览器。
一个错误实现的浏览器可以省略发送队列主机头信息,试试这个例子:
telnet myphpserver.com 80
> GET / <enter><enter>
在这种情况下 $_SERVER['HTTP_HOST'] 没有赋值,在这种情况下你可以使用 $_SERVER['SERVER_NAME'] 但前提是 $_SERVER['HTTP_HOST'] 为空,因为 no 是相同的。
如果您在浏览器上运行,则必须始终设置 HTTP_HOST ......那么就不需要检查......简单地,
$host = $_SERVER['HTTP_HOST'];
足够的
我通常会省略=== TRUE
,因为这里不需要它,因为isset()
返回一个布尔值,但这不应该阻止您的代码工作。
我还会在 if 语句之前将 $host 设置为合理的默认值(取决于您的应用程序)。 我有一个一般规则,如果以后要引用它,不要在条件中引入新变量。
$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']) 为真!
最好使用空如:
$host = '';
if (!empty($_SERVER['HTTP_HOST'])) {
$host = $_SERVER['HTTP_HOST'];
}
有关详细信息,请查看此处https://shiflett.org/blog/2006/server-name-versus-http-host
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.