【问题标题】:Detect OS X version 10.4 and below on server在服务器上检测 OS X 版本 10.4 及更低版本
【发布时间】:2010-11-22 11:37:30
【问题描述】:

基于this,看起来很难让操作系统版本检测绝对正确。但是,我正在寻找一些不太体面的东西,它可以警告 OS X Tiger 及以下版本的用户我的产品可能存在兼容性问题。

我能想到的启发式方法是首先检测操作系统是否为 Mac(相对简单),然后将用户代理与正则表达式 10[/._][0-4] 匹配以检测 Tiger 及以下。 我并不真正关心用户代理被修改的情况——我想要一个公平的检测 OS X 版本的命中率,而不是 100% 的解决方案。

还有其他建议/建议吗?

此外,指向一个工具,该工具通过为不同的操作系统版本 + 浏览器版本组合生成已知的用户代理字符串来帮助我测试这一点,还有加分。

谢谢!

【问题讨论】:

  • 似乎我误解了您的部分问题,因为我不是 Mac 用户,您介意发布一些示例用户代理字符串吗(例如 Mac 上的 Safari 和 Firefox)。
  • Safari: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us) AppleWebKit/530.18 (KHTML, like Gecko) 版本/4.0.1 Safari/530.18 FF: Mozilla/5.0 (Macintosh;U;Intel Mac OS X 10.5;en-US;rv:1.9.1.2)Gecko/20090729 Firefox/3.5.2

标签: php macos browser


【解决方案1】:

嗯,我相信在这种情况下,将 get_browser() 函数与最新的 php_browscap.ini 一起使用是最明智的选择,但不能 100% 确定它是否会告诉您操作系统版本。

编辑:browscap.ini 文件还为您提供足够的用户代理字符串,如果您仍决定自己完成所有解析工作。

编辑:似乎there is also a PHP implementation 不需要您更改 php.ini 文件。

编辑:根据您在此处提供给我的用户代理字符串,这是我认为效果最好的代码:

if (preg_match('~Mac OS X (.*?);~', $_SERVER['HTTP_USER_AGENT'], $matches) > 0)
{
    $version = preg_replace('~[^0-9]+~', '.', trim($matches[1]));

    if (version_compare($version, '10.5', '>=') === true)
    {
        // ok
    }

    else
    {
        // not ok
    }
}

else
{
    // not Mac OS X
}

【讨论】:

  • 这适用于 Windows 客户端版本 - 对于 Mac OS 版本来说效果不佳,除非我做的事情与我上面写的类似。不过谢谢 - 我不知道这个非常漂亮的 PHP 功能。
  • 确实如此,但是我认为如果您将 version_compare() 函数与 get_browser() 返回的版本索引一起使用,与仅使用正则表达式方法相比,您出错的可能性会更小。
【解决方案2】:

还有其他建议或建议吗?

是的,不要这样做。也许不是你想听到的,但你是对的,它充其量是不可靠的。

天生懒惰,我会选择工作量最少的解决方案。这是下载链接旁边的一个大红色文本区域,内容如下:

小心。本产品仅支持 OS X 10.5 或更高版本。请不要尝试与早期版本一起使用。

然后让用户决定。

如果您想进一步保护它们,请让您的可执行程序在它们的机器上运行后自行检查。我收集 OS X 上面有 uname,或者可以可靠地获取 OS 版本的类似工具。如果当时不符合规范,您可以简单地退出并显示类似的消息:

我警告过你。但不,你不会听。无论如何都必须去下载我,不是吗?好吧,现在我根本不会运行,而你已经浪费了所有宝贵的带宽。笨蛋,笨蛋,现在走开。

当然,你的错误信息可能比我的更委婉:-)

【讨论】:

  • 幸运的是,我的应用程序甚至不会加载 Leopard 之前的版本,因此在第一次运行时显示错误涉及在 10.4 兼容的启动器中引导我的应用程序的更痛苦的路径。布莱赫!我相信片状检测优于用户智能。很多运行 OS X 的人不知道他们运行的是什么版本。我相信,粗体红色文字警告他们不要将其与“Foo”之前的版本一起使用只会吓倒他们。
猜你喜欢
  • 2023-03-12
  • 2020-01-06
  • 2022-06-24
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多