php 偵測 browser 版本資訊
2017 Feb 26 未分類
因為某種理由
需要去蒐集最新的 browser user-agent
本來寫了一個 parser 去讀 apache log
結果意外超多
因為 log 的 user-agent 種類真的是五花八門
一直在 google 找解決方案
後來試到一個好東西
http://php.net/manual/en/function.get-browser.php
php 有個 function 叫做 get_browser
簡單說他會偵測你目前連線的 browser 版本
如果你想指定 user-agent 的字串讓他辨識也 ok
function 很簡單只有兩個參數
mixed get_browser ([ string $user_agent [, bool $return_array = false ]] )
$user_agent 就是你要給他的 user-agent
不給的話就試偵測目前連線的 user-agent
$return_array 則是決定回傳值是要 object 或是 array
好
重點來了
我寫了一行測試的 code
程式噴了一行錯誤給我
get_browser(): browscap ini directive not set
這三小?
查了一下
原來這個函數
要配合一個網站的資源檔
https://browscap.org/
這個網站會給一個叫做 browscap.ini 的檔案
來輔助辨識 browser 的版本
所以你要下載這個檔案 (php 的話要下載 php_browscap.ini)
然後放在你的網站上
好 放上去以後
程式還是找不到
又 Google 了一下
Google 表示
你要在 php.ini 裡面設定這個檔案的路徑
我本來想用 ini_set 去寫這個值
但是失敗 (如果有人可以的話麻煩跟我講一下 感謝)
只好另外寫一個 php.ini 放在 public_html
然後把 php_browscap.ini 的路徑寫進去
類似這樣
browscap = /home/xxx/www/php_browscap.ini
然後再跑一次程式
範例程式如下
$arr = get_browser(null, true);
print_r($arr);
null的意思是讓 function 去讀連線者的 user-agent
會印出
Array
(
[browser_name_regex] => ~^mozilla/5.0 (.*mac os x.*) applewebkit/.* (khtml.* like gecko) chrome/56..*safari/.*$~
[browser_name_pattern] => Mozilla/5.0 (*Mac OS X*) AppleWebKit/* (KHTML* like Gecko) Chrome/56.*Safari/*
[parent] => Chrome 56.0
[platform] => MacOSX
[comment] => Chrome 56.0
[browser] => Chrome
[browser_maker] => Google Inc
[version] => 56.0
[majorver] => 56
[device_type] => Desktop
[device_pointing_method] => mouse
[minorver] => 0
[ismobiledevice] =>
[istablet] =>
[crawler] =>
)
這樣就完成啦
然後我再另外寫一個資料庫 去塞這些五花八門的 user-agent
並註記寫入的更新日期
這樣我就可以依照時間逆向排序
來抓某個瀏覽器最新版本是第幾版
不過 browscap.ini 也會更新
所以得另外寫一個 cron 去更新這個檔案
不過 browscap 完全知道工程師的企圖XD
他有在網頁上寫定期更新 browscap.ini 的原則
基本上我想一個禮拜更新一次應該就可以了
給大家參考~
0則留言