我刚刚浏览了一个网站的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']
?
答案 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网页处理程序的请求是否已将您的处理程序设置为您的网页之一。