2010-09-30 77 views

回答

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

+1,但它本來不錯,顯示JS代碼的樣本做就是非專業:) – Shikiryu 2010-09-30 13:50:11

+0

我添加了一個例子 – Thariama 2010-09-30 14:02:53

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()); 

詳情請參閱enter link description here