基于this,看起来很难让操作系统版本检测绝对正确。但是,我正在寻找一些不太合适的东西,警告OS X Tiger的用户以及我的产品可能存在的问题。
我能想到的启发式方法是首先检测操作系统是否是Mac(相对简单),然后将用户代理与正则表达式10[/._][0-4]
进行匹配以检测Tiger及以下。
我并不真正关心修改用户代理的情况 - 我希望公平的触发率检测OS X版本,而不是100%的解决方案。
还有其他建议吗?
此外,指向可帮助我通过为不同操作系统版本+浏览器版本组合生成已知用户代理字符串来测试此工具的工具的奖励积分。
谢谢!
答案 0 :(得分:1)
嗯,我相信在这种情况下使用get_browser()函数和最新的php_browscap.ini是最明智的选择,但不是100%确定它是否会告诉你操作系统版本。 / p>
编辑:如果您仍然决定自己完成所有解析工作,那么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
}
答案 1 :(得分:0)
还有其他任何建议或建议吗?
是的,不要这样做。也许不是你想听到的,但你是对的,它充其量是不可靠的。
本来就懒惰,我会选择涉及最少工作量的解决方案。这是下载链接旁边的一个大红色文本区域,说明如下:
当心。仅OS X 10.5或更高版本支持此产品。请不要尝试使用早期版本。
然后让用户决定。
如果您想进一步保护它们,请让可执行程序在其盒子上运行后自行检查。我收集OS X上有uname
,或类似的工具,可以可靠地获得操作系统版本。如果它不符合当时的规格,您只需退出一条类似的消息:
我警告过你。但不,你不会听。不管怎样,不得不去下载我,不是吗。好吧,现在我根本不打算跑,你浪费了所有宝贵的带宽。傻,傻的男人,现在就走了。
当然,您的错误消息可能比我的更加委婉: - )