是否可以设置$ _SERVER ['HTTP_USER_AGENT']?

时间:2011-06-24 08:43:51

标签: php user-agent error-log

我刚刚浏览了一个网站的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');
}

是否可以通过HTTP请求设置$_SERVER['HTTP_USER_AGENT']

5 个答案:

答案 0 :(得分:25)

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

  

用户代理的内容:来自当前请求的标头(如果有)

所以正确的代码是:

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

答案 1 :(得分:7)

是。任何浏览器或用户代理都可以选择不发送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 :(得分:4)

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

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

答案 3 :(得分:2)

PHP文档说:

'HTTP_USER_AGENT'     User-Agent的内容:来自当前请求的标头,(如果有)

(相关部分用斜体显示)所以它似乎并不总是被设置。

答案 4 :(得分:1)

HTTP_USER_AGENT未定义的示例是,来自GoDaddy的404网页处理程序的请求是否已将您的处理程序设置为您的网页之一。