2011-06-24 75 views
24

我只是一直在尋找通過網站的error_log和錯誤的已記錄的幾次之一是:

[21-Jun-2011 12:24:03] PHP Notice: Undefined index: HTTP_USER_AGENT in /home/ukevents/public_html/lib/toro.php on line 130

這涉及到toro.php是該行:

private function ipad_request() { 
    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); 
} 

$_SERVER['HTTP_USER_AGENT']可能不被HTTP請求設置嗎?

回答

25

是的,這可能是由客戶端發送(或不發送)的HTTP標頭,您不應該依賴它。從PHP手冊:用戶代理的

內容:從目前的請求頭,如果有一個

所以正確的代碼是:

private function ipad_request() { 
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad'); 
} 
6

是。任何瀏覽器或用戶代理都可以選擇不發送User-Agent標題。如果他們不發送該標題,則不會設置$_SERVER['HTTP_USER_AGENT']

使用isset()確保設置了$_SERVER['HTTP_USER_AGENT']

private function ipad_request() { 
    if(!isset($_SERVER['HTTP_USER_AGENT'])) return false; 

    return strstr($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false; 
} 
2

PHP文檔表示:

'HTTP_USER_AGENT' 內容的用戶代理的:從當前請求頭,如果有一個

(相關部分用斜體表示)所以它看起來可能並不總是被設置。

4

是的,這是可能的,但它不會發生常規請求。

所有瀏覽器都會在請求中發送一個瀏覽器字符串,所以任何沒有的請求都會來自其他程序。即使所有行爲良好的機器人都會發送瀏覽器字符串,所以您不必擔心不會在搜索引擎中顯示。

1

HTTP_USER_AGENT未定義的示例是,如果來自GoDaddy的404頁面處理程序的請求來自您的站點,而您已將該處理程序設置爲您的頁面之一。

相關問題