2
A
回答
4
用戶代理標題可能會顯示一些操作系統信息,但我不會指望這一點。
爲您的使用情況下,我會做使用JavaScript從客戶端,告知您的客戶機的操作系統的服務器調用Ajax。
這裏是一個例子。
的Javascript(客戶端,瀏覽器檢測+ AJAX調用): (注:您將需要detection script from here)
window.addEvent('domready', function() {
if (BrowserDetect) {
var q_data = 'ajax=true&browser=' + BrowserDetect.browser + '&version=' + BrowserDetect.version + '&os=' + BrowserDetect.OS;
var query = 'record_browser.php'
var req = new Request.JSON({url: query, onComplete: setSelectWithJSON, data: q_data}).post();
}
});
PHP(服務器端):
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$session = session_id();
$user_id = isset($user_id) ? $user_id ? 0;
$browser = isset($_POST['browser']) ? $_POST['browser'] ? '';
$version = isset($_POST['version']) ? $_POST['version'] ? '';
$os = isset($_POST['os']) ? $_POST['os'] ? '';
// now do here whatever you like with this information
}
2
你可以看一下用戶代理頭($_SERVER['HTTP_USER_AGENT']
)。例如,iPhone用戶代理看起來像:
的Mozilla/5.0(iPhone; U; CPU iPhone OS 3_0例如Mac OS X; EN-US) 爲AppleWebKit/420.1(KHTML,例如Gecko ) 版本/ 3.0移動/ 1A542a Safari瀏覽器/ 419.3
的Windows XP中一個看起來像:
的Mozilla/5.0(窗口; U; 的Windows NT 5.1; EN-US; rv:1.9.2.10)Gecko/20100914 Firefox/3.6.10
依此類推。看到一個簡單的腳本here。您也可以使用get_browser()
(你需要browscap雖然)
注意,這個頭很容易被僞造,因此不應該被用於任何關鍵任務。
1
可靠嗎?你不能。
不可靠? $_SERVER['HTTP_USER_AGENT']
通常包含操作系統信息。
0
get_browser功能解析$ _SERVER ['HTTP_USER_AGENT']給你。儘管你需要browsecap.ini。
0
而非實施這種自己我會嘗試使用現有的軟件,像Browser.php分析給用戶代理字符串爲您服務。有很多小東西需要考慮到最好使用專門的庫,而不是自己學習所有這些小平臺/瀏覽器的不協調。
0
function getBrowser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
var_dump(getBrowser());
相關問題
- 1. jQuery - 檢測操作系統和操作系統版本
- 2. 在Clojure中檢測操作系統
- 3. C++檢測操作系統版本
- 4. 是否有宏檢測操作系統...?
- 5. 從Firefox擴展檢測操作系統
- 6. 檢測操作系統語言
- 7. 如何從Silverlight應用程序中檢測操作系統?
- 8. 最簡單的方式操作系統檢測與PHP?
- 9. 如何在php中檢測操作系統編碼?
- 10. 使用JS檢測MacOS,iOS,Windows,Android和Linux操作系統
- 11. 如何使用宏檢測iPhone操作系統版本
- 12. 如何使用GWT檢測操作系統?
- 13. 從Google Chrome擴展程序中檢測操作系統
- 14. 遠程系統
- 15. 單程序操作系統
- 16. 我怎樣檢測用戶操作系統
- 17. 如何檢測用戶正在運行的操作系統?
- 18. 如何使用JavaScript檢測操作系統(不含不推薦使用的window.navigator)
- 19. 操作系統
- 20. 如何檢測系統信息,如操作系統或設備類型
- 21. 如何檢測工作站/系統屏幕使用Java在Windows操作系統中鎖定/解鎖?
- 22. 設置操作系統標誌來測試操作系統的具體功能
- 23. 檢測應用程序是否由於低RAM而被操作系統退出
- 24. 設置應用程序以檢測操作系統版本。和iPhone或iPad
- 25. 如何在Java小應用程序中檢測瀏覽器和操作系統
- 26. 如何檢測應用程序中的iPhone操作系統版本?
- 27. Android操作系統和應用程序
- 28. WPF應用程序和操作系統
- 29. 系統測試的操作順序?
- 30. 遠程升級IBM Tivoli Monitoring操作系統代理
+1,但它本來不錯,顯示JS代碼的樣本做就是非專業:) – Shikiryu 2010-09-30 13:50:11
我添加了一個例子 – Thariama 2010-09-30 14:02:53