繁体   English   中英

未定义索引 HTTP_HOST 即使已检查

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM