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