是否可以不设置 $_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值以查看它们是否设置正确。加上这个鳕鱼