基于this,看起来很难让操作系统版本检测完全正确。然而,我正在寻找一些半像样的东西,它可以警告OS及以下版本的用户我的产品可能存在兼容问题。
我能想到的启发式方法是首先检测操作系统是否为Mac (相对简单),然后将用户代理与正则表达式10[/._][0-4]进行匹配,以检测Tiger及以下。我真的不关心用户代理被修改的情况--我想要一个公平的命中率来检测OS X的版本,而不是一个100%的解决方案。
是否有其他建议/建议?
此外,指向一个工具,通过为不同的OS版本+浏览器版本组合生成已知的用户代理字符串来帮助我测试这一点,这也是加分。
谢谢!
发布于 2009-08-25 02:50:59
嗯,我相信在这种情况下,使用带有最新php_browscap.ini的get_browser()函数是最明智的选择,但不能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
}发布于 2009-08-25 02:50:12
还有其他的建议或建议吗?
是的,不要这样做。也许不是你想听的,但你是对的,这充其量是不可靠的。
由于天生懒惰,我会选择工作量最少的解决方案。下载链接旁边有一个很大的红色文本区,内容如下:
要当心。仅OS X 10.5或更高版本支持此产品。请不要尝试与早期版本一起使用。
然后让用户来决定。
如果你想进一步保护他们,一旦你的可执行程序在他们的机器上运行,就让它自己检查一下。我猜OS上有uname,或者是一个类似的工具,可以可靠地获取操作系统版本。如果在这一点上它不符合规范,您可以简单地退出,并显示类似的消息:
我警告过你了但是你不会听的。不管怎么说,你还是得去下载我,不是吗。好了,现在我根本不打算运行了,你已经浪费了所有宝贵的带宽。愚蠢的,愚蠢的人,现在走吧。
当然,你的错误信息可能比我的更圆滑:-)
https://stackoverflow.com/questions/1325773
复制相似问题