Php 需要web应用程序的最低浏览器版本

Php 需要web应用程序的最低浏览器版本,php,user-agent,dom4,Php,User Agent,Dom4,我有一个PHP的web应用程序,它在前端需要一些更现代的浏览器功能,比如。如网站上所述,只有非常新的浏览器支持此功能。我需要依赖的一些HTML5特性也是如此 我现在想要实现的是,使用UserAgent字符串检查服务器端用户正在运行的浏览器,如果它低于特定版本,则将其重定向到信息页面,通知他应该使用更新的浏览器 我已经尝试了一段时间来设置适当的正则表达式来检查UA字符串。然而,我有一点被卡住了,因为浏览器制造商并不总是保持一个干净的模式——比如说,对于Opera浏览器,我至少需要12个版本 Op

我有一个PHP的web应用程序,它在前端需要一些更现代的浏览器功能,比如。如网站上所述,只有非常新的浏览器支持此功能。我需要依赖的一些HTML5特性也是如此

我现在想要实现的是,使用UserAgent字符串检查服务器端用户正在运行的浏览器,如果它低于特定版本,则将其重定向到信息页面,通知他应该使用更新的浏览器

我已经尝试了一段时间来设置适当的正则表达式来检查UA字符串。然而,我有一点被卡住了,因为浏览器制造商并不总是保持一个干净的模式——比如说,对于Opera浏览器,我至少需要12个版本

  • Opera 12.14示例1:Opera/9.80(Windows NT 6.0)Presto/2.12.388版本/12.14
  • Opera12.14示例2:Mozilla/5.0(Windows NT 6.0;rv:2.0)Gecko/20100101 Firefox/4.0 Opera12.14
    这也可能是Firefox4.0
  • Opera11.51:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;de)Opera11.51
    这也可能是Internet Explorer 9.0
同样,对同一浏览器和版本的跟踪也很棘手,如Opera 12.14的两个示例所示:要么是“version/12.14”,要么是“Opera 12.14”,要么是其他一些非常“随机”的字符串。对于其他浏览器,这个问题非常类似

所以问题是:你将如何继续

方法1:
useragentstring.com有一个API,每当用户访问欢迎页面和/或登录时,我都可以查询该API。我不确定这在安全性应用程序性能方面是否是个好主意

方法2:
PHP的get_browser()函数与browscap.ini结合使用。这种方法无法区分桌面浏览器和移动浏览器

方法3:
方法2的另一种替代方法是,您可以定义自己的browsercap.ini,而无需依赖服务器上您无权访问的某个位置的browsercap.ini

还是其他方法


我很乐意发表一些评论。

现在,许多开发人员使用JavaScript来查询浏览器中是否有可用的功能,而不是保留自己的用户代理和功能数据库(这可能很难做到正确,也很难保持更新)


这样做相对简单。深入探讨了为什么这种方法是一个好主意,并展示了一些在不想依赖库的情况下进行功能检测的替代方法。

为什么要在服务器上执行所有操作?使用javascript或,并使用javascript向用户显示消息。

我过去曾用过这首小曲(节选):


(见附件)。它还不完整,但它足以满足我当时的需要。除此之外,客户端的功能检测无疑是一个方向——不管是css、html还是javascript(即,下降了1/3)。我喜欢使用正则表达式-但不能依赖浏览器供应商在不同版本之间保持UA字符串相同(更不用说遵循实际标准了!请参阅:useragentstring.com/pages/useragentstring.php)。

不要检查UserAgent,使用JavaScript检查浏览器中是否支持该功能。如果您检测不正确,您将极大地挫败用户。感谢所有的答案,并为我指明了正确的方向。我已经在使用Modernizer了,但没有想到正确的方法——现在我将进行客户端功能检测,然后如果用户缺少功能,将其重定向到错误页面。
var browsers = [{
        browser : "Opera",
        css     : "o",
        engine  : "Presto",
        rex     : {
                    eng : /(?:Gecko|Presto)\/([0-9.]*)/,
                    brw : /.+(?:Opera|Version).([0-9\.]+)/
          },
        ever    : 0,
        bver    : 0
   },{}]

var UA = function(p_ua) {

    var curr, i;

    for (i in browsers) {
        var r = new RegExp(browsers[i].browser);

        if (p_ua.match(r) && (!!browsers[i].rex)) {
            curr = browsers[i];
            curr.ever = curr.rex.eng.exec(p_ua)[1] || curr.rex.eng.exec(p_ua)[0];
            curr.bver = curr.rex.brw.exec(p_ua)[1] || curr.rex.brw.exec(p_ua)[0];

            break;
        }
    }

    return curr;
}