$_SERVER['HTTP_USER_AGENT']有可能没有设置吗?

29

我刚刚查看了一个网站的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请求中没有被设置吗?

5个回答

30

是的,这是由客户端发送(或未发送)的HTTP标头,您不应该依赖它。来自 PHP 手册:

如果有当前请求的 User-Agent: 标头,则返回该标头的内容。

因此正确的代码应该是:

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

9

是的。任何浏览器或用户代理都可以选择不发送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;
}

5
是的,这是可能的,但对于常规请求来说却从未发生过。
所有浏览器都会在请求中发送浏览器字符串,因此任何没有浏览器字符串的请求都来自其他程序。即使所有行为良好的机器人也会发送浏览器字符串,因此您不必担心不会出现在搜索引擎中。

2
PHP文档中说:
'HTTP_USER_AGENT' 是当前请求的User-Agent头内容,如果有的话。 (关键部分已用斜体标出),因此看起来并不总是设置。

1
如果您设置了处理程序为您的页面,那么来自GoDaddy网站的404页面处理程序发出的请求可能是HTTP_USER_AGENT未定义的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接