2009-03-15 35 views
18

Tôi đã tự hỏi liệu có cách nào tôi có thể phát hiện phiên bản Hệ điều hành chính xác từ trình duyệt của mình bằng PHP/JS/ASP không?Phát hiện phiên bản hệ điều hành chính xác từ trình duyệt

Tôi biết tôi có thể phát hiện loại hệ điều hành (Windows XP, Windows Vista, OS X, v.v.) nhưng tôi cần phát hiện phiên bản chính xác: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro, v.v. ..

Trả lời

25

Câu trả lời ngắn: Bạn không thể.

Long trả lời:

Tất cả bạn phải là thông tin trong tiêu đề HTTP User-Agent, mà thường chứa tên hệ điều hành và phiên bản.

Thông thường, các trình duyệt chạy trên Mac OS và Linux gửi đủ thông tin để xác định hệ điều hành chính xác. Ví dụ, đây là tiêu đề User-Agent của tôi:

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv: 1.9.0.7) Gecko/2009030423 Ubuntu/8,10 (dũng cảm) Firefox/3.0. 7

Bạn có thể thấy rằng tôi đang chạy Ubuntu 8.10 Intrepid Ibex.

Và đây là những gì Firefox và Safari báo cáo 4 Beta trên của tôi MacBook Pro:

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv: 1.9.0.7) Gecko/2009021906 Firefox/3.0.7

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; en-us) AppleWebKit/528,16 (KHTML, như Gecko) Version/4.0 Safari/528,16

của Windows trình duyệt, mặt khác, thường chỉ báo cáo phiên bản hệ điều hành và không phải là gói cụ thể (Pro, Doanh nghiệp, v.v.):

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: x.x.x) Gecko/20041107 Firefox/x.x

+0

lẽ có thể của nó qua Flash? –

+2

@Roy: có thể, nhưng tôi sẽ không đặt cược vào nó. –

+0

Và lưu ý rằng ngay cả điều này cũng không dễ dàng. Ví dụ, thay đổi chuỗi tác nhân người dùng của bạn để báo cáo điều gì đó khác là tầm thường trong Firefox (plugin tải xuống) và gần như tầm thường trong IE (thay đổi sổ đăng ký). –

1

Tôi không nghĩ rằng bạn sẽ có thể phân biệt các phiên bản khác nhau của Vista, nhưng bạn sẽ có thể để có được hệ điều hành từ sở hữu nền tảng navigator của đối tượng. Có thể bạn sẽ phải phân tích nó, hoặc phân biệt dựa trên nội dung của nó.

<script type="text/javascript"> 
    alert(navigator.platform); 
</script> 

Xem www.w3schools.com hướng dẫn cho một example cho thấy làm thế nào để có được tất cả các đặc tính của hoa tiêu.

EDIT:

Để có được phiên bản chính xác, bạn có thể xây dựng một điều khiển ActiveX (chỉ dành cho Windows) hoặc Java Applet và sử dụng đối tượng java.lang.System để xem các thuộc tính hệ thống hiện hành. Bạn có thể nhận đủ thông tin từ trình duyệt cho các hệ thống không phải Windows và chỉ sử dụng điều khiển cho các hệ thống Windows. Tôi đã không cố gắng này, vì vậy bạn cần phải thử nghiệm để xem nếu nó sẽ làm việc. Tôi phải tin rằng điều khiển ActiveX của Microsoft cho Microsoft Update có thể phát hiện chính xác phiên bản hệ thống và phần mềm được cài đặt để nó hoạt động.

+0

Như bạn đã nói, điều này sẽ không giúp phân biệt các phiên bản phụ, nhưng cảm ơn cho đoạn :-) –

1

Bạn thực sự nên cố gắng tránh làm điều gì đó tương tự trừ khi nó thực sự cần thiết cho chức năng của ứng dụng web.

Lưu ý rằng:

Không phải tất cả yêu cầu đều có thể đến từ khách hàng chạy trên cửa sổ.

Không phải tất cả các yêu cầu đều có thể đến từ một ứng dụng khách có hỗ trợ JavaScript.

Tiêu đề tác nhân người dùng có thể không có trong yêu cầu.

Nội dung trong tiêu đề tác nhân người dùng có thể gây nhầm lẫn.

Ứng dụng web được thiết kế tốt sẽ cung cấp nội dung và chức năng đầy đủ bất kể nội dung trong tiêu đề tác nhân người dùng của yêu cầu hoặc nếu ứng dụng hỗ trợ javascript hoặc bất kỳ tiện ích mở rộng khách hàng nào khác.

+0

Cảm ơn, sẽ giữ nó trong lí trí. –

+4

-1. Không trả lời câu hỏi OPs. Đưa ra ý kiến ​​không được yêu cầu thay thế. – maxedison

+0

Đây là thông tin hữu ích về câu hỏi, nhưng không trả lời chính câu hỏi (+0). Tôi đồng ý với bạn, nhưng với tư cách là S.O. có sự khác biệt, một số lần nó là cần thiết để kiểm tra nó: ví dụ: windows/linux sử dụng Ctrl cho đa lựa chọn, mac sử dụng bowen-knot, nếu bạn muốn giải thích chính xác cho người dùng, bạn có thể: 1) giải thích tất cả cho cả hai , 2) kiểm tra hệ điều hành. –

1

Như những người khác đã nói, không, không đáng tin cậy.

Đó là lý do mà jquery đã chuyển sang khả năng trình duyệt hệ thống (vì thiếu từ tốt hơn) thay vì hệ thống đánh hơi trình duyệt cho các chức năng của nó.

+0

Tính năng duyệt trình duyệt hoặc đánh hơi trình duyệt như bạn nói là BROWSER có liên quan, chứ không phải liên quan đến S.O. Ví dụ, Firefox 24 có khả năng giống nhau trên Linux, Mac hoặc Windows. Câu hỏi này là về S.O., không phải là trình duyệt. –

2

Trong cổ điển ASP và ASP.NET sử dụng

Request.ServerVariables("HTTP_USER_AGENT") 

này hoạt động tốt nhất vì nó không giải thích code, điều này đang chạy trên máy chủ.

+0

luôn luôn tốt để có mã số làm việc hoặc đề nghị cho những gì tài sản để kiểm tra – MikeJ

17

Sau khi một số googling tôi tìm thấy mã này và có vẻ như được làm việc ok, (không phát hiện Unix dù)

<?php 
$OSList = array 
(
// Match user agent string with operating systems 
'Windows 3.11' => 'Win16', 
'Windows 95' => '(Windows 95)|(Win95)|(Windows_95)', 
'Windows 98' => '(Windows 98)|(Win98)', 
'Windows 2000' => '(Windows NT 5.0)|(Windows 2000)', 
'Windows XP' => '(Windows NT 5.1)|(Windows XP)', 
'Windows Server 2003' => '(Windows NT 5.2)', 
'Windows Vista' => '(Windows NT 6.0)', 
'Windows 7' => '(Windows NT 7.0)', 
'Windows NT 4.0' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)', 
'Windows ME' => 'Windows ME', 
'Open BSD' => 'OpenBSD', 
'Sun OS' => 'SunOS', 
'Linux' => '(Linux)|(X11)', 
'Mac OS' => '(Mac_PowerPC)|(Macintosh)', 
'QNX' => 'QNX', 
'BeOS' => 'BeOS', 
'OS/2' => 'OS/2', 
'Search Bot'=>'(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)' 
); 
// Loop through the array of user agents and matching operating systems 
foreach($OSList as $CurrOS=>$Match) 
{ 
// Find a match 
if (eregi($Match, $_SERVER['HTTP_USER_AGENT'])) 
{ 
// We found the correct match 
break; 
} 
} 
// You are using ... 
echo "You are using ".$CurrOS; 
?> 
+1

Không thực sự những gì ông muốn làm mặc dù là nó? :) – willcodejavaforfood

+1

Điều này sẽ không phát hiện chính xác gói hệ điều hành (nói xp home vista final) của windows – Ranjith

+0

cộng với nó không phát hiện hệ điều hành di động, mà là khá cần thiết hiện nay –

0

trong CodeIgniter bạn có thể tìm thấy thư viện gọi là "user_agent". Nó sẽ cung cấp cho bạn tất cả những gì bạn cần. Nếu bạn không sử dụng CI, bạn vẫn có thể "trích xuất" mã cho khung công tác của mình. Hy vọng rằng sẽ giúp. http://codeigniter.com/user_guide/libraries/user_agent.html

14

// này sẽ giúp bạn

$uagent = $_SERVER['HTTP_USER_AGENT'] . "<br/>"; 

function os_info($uagent) 
{ 
    // the order of this array is important 
    global $uagent; 
    $oses = array(
     'Win311' => 'Win16', 
     'Win95' => '(Windows 95)|(Win95)|(Windows_95)', 
     'WinME' => '(Windows 98)|(Win 9x 4.90)|(Windows ME)', 
     'Win98' => '(Windows 98)|(Win98)', 
     'Win2000' => '(Windows NT 5.0)|(Windows 2000)', 
     'WinXP' => '(Windows NT 5.1)|(Windows XP)', 
     'WinServer2003' => '(Windows NT 5.2)', 
     'WinVista' => '(Windows NT 6.0)', 
     'Windows 7' => '(Windows NT 6.1)', 
     'Windows 8' => '(Windows NT 6.2)', 
     'Windows 8.1' => '(Windows NT 6.3)', 
     'Windows 10' => '(Windows NT 10.0)', 
     'WinNT' => '(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)', 
     'OpenBSD' => 'OpenBSD', 
     'SunOS' => 'SunOS', 
     'Ubuntu' => 'Ubuntu', 
     'Android' => 'Android', 
     'Linux' => '(Linux)|(X11)', 
     'iPhone' => 'iPhone', 
     'iPad' => 'iPad', 
     'MacOS' => '(Mac_PowerPC)|(Macintosh)', 
     'QNX' => 'QNX', 
     'BeOS' => 'BeOS', 
     'OS2' => 'OS/2', 
     'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves/Teoma)|(ia_archiver)' 
    ); 
    $uagent = strtolower($uagent ? $uagent : $_SERVER['HTTP_USER_AGENT']); 
    foreach ($oses as $os => $pattern) 
     if (preg_match('/' . $pattern . '/i', $uagent)) 
      return $os; 
    return 'Unknown'; 
} 
echo os_info($uagent); 
+0

Phải được chấp nhận làm câu trả lời. –

1

tôi đã tạo ra một hàm jquery mà thực hiện điều này. Bằng cách này, chúng tôi có thể theo dõi tất cả hệ điều hành bằng cách sử dụng navigator.

hy vọng ai đó sẽ nhận được sự giúp đỡ từ này:

function find_os_version() { 
    var ua = navigator.userAgent.toLowerCase(); 
    if (ua.indexOf("windows nt 5.0") != -1) { 
    return 'win2k'; 
    } 
    if (ua.indexOf("windows nt 5.1") != -1) { 
    return 'winXP'; 
    } 
    if (ua.indexOf("windows nt 6.0") != -1) { 
    return 'winVista'; 
    } 
    if (ua.indexOf("windows nt 6.1") != -1) { 
    return 'win7'; 
    } 
    if (ua.indexOf("windows nt 6.2") != -1) { 
    return 'win8'; 
    } 
} 
1

này có thể là cách đơn giản nhất:

Tải thư viện từ http://mobiledetect.net

Đặt Mobile_Detect.php để 'thư viện' nếu sử dụng CI hoặc chỉ bao gồm nó.

Sử dụng mã này trong PHP

$detect = new Mobile_Detect(); 
// Get the version() of components. 
$detect->version('iPad'); // 4.3 (float) 
$detect->version('iPhone') // 3.1 (float) 
$detect->version('Android'); // 2.1 (float) 
$detect->version('Opera Mini'); // 5.0 (float) 

Tìm tài liệu về http://dwij.co.in/mobile-os-detection-in-php-codeigniter

Các vấn đề liên quan