【问题标题】: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 请求设置?

【问题讨论】:

    标签: php user-agent error-log


    【解决方案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 页面处理程序,您已将处理程序设置为您的页面之一。

            【讨论】:

              猜你喜欢
              • 2016-03-17
              • 2010-12-24
              • 2014-04-20
              • 2011-10-24
              • 2017-01-03
              • 1970-01-01
              • 1970-01-01
              • 2014-11-30
              • 2016-01-28
              相关资源
              最近更新 更多