2011-06-24 74 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页面处理程序的请求来自您的站点,而您已将该处理程序设置为您的页面之一。

相关问题