我正在尋找一種可靠的方法來找出哪些用戶代理正在請求我的PHP頁面。我知道get_browser
以及$_SERVER['HTTP_USER_AGENT']
但似乎都不可靠。用戶代理:PHP解析,browscap和非常規「瀏覽器」
使用get_browser
,您需要將browscap PHP指令設置爲定義用戶代理的ini文件。 PHP推薦這個 - http://browsers.garykeith.com/downloads.asp - 所以我安裝了LAMP指定的「完整」。
它適用於你平常的瀏覽器組合,它的效果很好,但我特別處理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案例:
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']
至少吐出一堆.NET引用該辦公室要求收集。
考慮到這一點,任何人都可以指向一個寫得很好的功能,打破$_SERVER['HTTP_USER_AGENT']
?我運行的每個搜索結果都是建議使用get_browser
代替。
爲什麼get_browser
似乎從基於Windows的安裝引用的MS Office在所有的失敗有什麼想法也歡迎...這裏有各種用戶點擊不同的Office應用程序鏈接的10個測試($_SERVER
第一則get_browser
結果):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一起工作,儘管有最新的ini與Office數據。
我很樂意爲MS Office或NOT MS Office做一個最佳猜測。原因是因爲我們有許多引用會員專用頁面的文檔,並且當您單擊Office內部的鏈接時,它會在任何重定向後解析最終頁面,包括重定向,告訴您此頁面僅限會員。因此,Office會將最終目的地提供給真實的瀏覽器,而我們的登錄成員將獲得您不是會員的錯誤。 我可以想出多種方法來解決這個問題,但其中一個將涉及猜測用戶代理是什麼......所以'$ _SERVER ['HTTP_USER_AGENT']'輸出的一個很好的解析器在這裏很方便。 – lioman
@lioman你是說你想使用用戶代理標題進行認證,本質上?如果是這樣,我真的不會推薦。 – deceze
@deceze不,如果我知道請求來自Office,我將不會將用戶重定向到任何錯誤消息,因爲即使Office無法看到我的頁面內容,Office也會返回正確的URL - 但它會通過右側瀏覽器的URL,通過驗證可以看到該頁面。 – lioman