簡體   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