26

我刚刚浏览了一个网站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 请求设置?

4

5 回答 5

28

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

User-Agent 的内容:当前请求的标头,如果有的话

所以正确的代码是:

private function ipad_request() {
    return isset($_SERVER['HTTP_USER_AGENT']) && strstr($_SERVER['HTTP_USER_AGENT'], 'iPad');
}
于 2011-06-24T08:45:36.230 回答
8

是的。任何浏览器或用户代理都可以选择不发送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;
}
于 2011-06-24T08:46:31.233 回答
4

是的,这是可能的,但对于常规请求,它永远不会发生。

所有浏览器都会在请求中发送浏览器字符串,因此任何没有收到的请求都来自其他程序。甚至所有表现良好的机器人都会发送浏览器字符串,因此您也不必担心不会出现在搜索引擎中。

于 2011-06-24T08:50:29.053 回答
2

PHP 文档说:

'HTTP_USER_AGENT' 用户代理的内容:当前请求的标头,如果有的话

(相关部分斜体)所以看起来它可能并不总是被设置。

于 2011-06-24T08:47:50.437 回答
1

HTTP_USER_AGENT 未定义的一个示例是,如果请求来自您的站点的 GoDaddy 404 页面处理程序,您已将处理程序设置为您的页面之一。

于 2013-05-17T18:11:25.820 回答