【发布时间】:2011-12-29 02:37:25
【问题描述】:
我正在寻找一种可靠的方法来找出哪些用户代理正在请求我的 PHP 页面。我知道get_browser 和$_SERVER['HTTP_USER_AGENT'],但似乎都不可靠。
使用get_browser,您需要将browscap PHP 指令设置为定义用户代理的ini 文件。 PHP 推荐这个 - http://browsers.garykeith.com/downloads.asp - 所以我安装了为 LAMP 指定的“完整”。
get_browser 非常适合您通常的浏览器组合,但我专门处理来自 MS Office 的请求。在这种情况下,它似乎什么也不返回,就像使用 OS X Excel 一样(注意:$_SERVER['HTTP_USER_AGENT'] 是第一行,然后是 get_browser 的数组输出):
Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/14.0.0
Array
(
[browser_name_regex] = ^.*$
[browser_name_pattern] = *
[browser] = Default Browser
[version] = 0
[majorver] = 0
[minorver] = 0
[platform] = unknown
[alpha] =
[beta] =
[win16] =
[win32] =
[win64] =
[frames] =
[iframes] =
[tables] =
[cookies] =
[backgroundsounds] =
[javascript] =
[vbscript] =
[javaapplets] =
[activexcontrols] =
[isbanned] =
[ismobiledevice] =
[issyndicationreader] =
[crawler] =
[cssversion] = 0
[aolversion] = 0
)
更糟糕的是,在某些 Windows 案例中似乎甚至没有提及 Office:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Array
(
[browser_name_regex] = ^mozilla/4\.0 (compatible; msie 7\.0.*; .*windows nt 6\.1.*).*$
[browser_name_pattern] = Mozilla/4.0 (compatible; MSIE 7.0*; *Windows NT 6.1*)*
[parent] = IE 7.0
[platform] = Win7
[browser] = IE
[version] = 7.0
[majorver] = 7
[win32] = 1
[frames] = 1
[iframes] = 1
[tables] = 1
[cookies] = 1
[backgroundsounds] = 1
[javascript] = 1
[vbscript] = 1
[javaapplets] = 1
[activexcontrols] = 1
[cssversion] = 2
[minorver] = 0
[alpha] =
[beta] =
[win16] =
[win64] =
[isbanned] =
[ismobiledevice] =
[issyndicationreader] =
[crawler] =
[aolversion] = 0
)
从这些示例来看,get_browser 似乎在这里实际上不太可靠,可以从$_SERVER['HTTP_USER_AGENT'] 收集更多信息,这至少为 Office 请求提供了一堆 .NET 引用。
考虑到这一点,谁能给我指出一个写得很好的函数,它会破坏$_SERVER['HTTP_USER_AGENT']?我运行的每次搜索都建议使用get_browser。
任何关于为什么get_browser 似乎无法从基于 Windows 的安装中引用 MS Office 的想法也受到欢迎...这里有 10 个不同用户单击不同 Office 应用程序中的链接的测试(首先是$_SERVER,然后是 @987654338 @结果):http://pastebin.com/5m2zWMrt - 注意在 OS X 的前三个示例之后没有任何办公室迹象。我还在 MSDN 上问了一个相关问题:http://social.msdn.microsoft.com/Forums/en-US/officegeneral/thread/8ad594cd-0dfe-4110-8ffc-4d0caee4c29f
总而言之,我想获得一个短期解决方案,并配备一个良好的 $_SERVER['HTTP_USER_AGENT'] 解析器,理想情况下,它可以确定请求是否来自 MS Office。从长远来看,我需要弄清楚为什么get_browser 不能与 MS Office 一起使用,尽管它拥有包含 Office 数据的最新 ini。
【问题讨论】:
标签: php ms-office user-agent browscap