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

Posted

技术标签:

【中文标题】是否可以不设置 $_SERVER[\'HTTP_USER_AGENT\'] ?【英文标题】:Is it possible for $_SERVER['HTTP_USER_AGENT'] to not be set?是否可以不设置 $_SERVER['HTTP_USER_AGENT'] ? 【发布时间】:2011-09-21 20:45:33 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

所以正确的代码是:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

PHP 文档说:

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

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于是否可以不设置 $_SERVER['HTTP_USER_AGENT'] ?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache .htaccess 设置 Php $_SERVER 值 ($_SERVER['something'])

php 以下是您可以临时添加到wp-config.php的一些代码,以测试$ _SERVER值以查看它们是否设置正确。加上这个鳕鱼

Nginx:日志配置与日志定时分割备份

Nginx:日志配置与日志定时分割备份

是否可以更改 htaccess 中的 $_SERVER['HTTP_HOST'] ? [关闭]

是否可以在标头中添加错误处理程序(“位置:”.$_SERVER[“HTTP_REFERER”]);在php中