2010-08-09 23 views
9

Ho passato un giorno dentro e fuori da Googeling per questo; senza fortuna finora.Ottieni il SO utente e il numero di versione

Come posso ottenere il SO e la versione degli utenti. Il mio sarebbe Mac OS X 10.6.4, il PC di riserva in ufficio sarebbe Windows XP SP3. Vedi cosa sto ottenendo.

Ho visto un milione e un metodo per ottenere la piattaforma degli utenti da solo, ma non la versione.

JS sarebbe l'ideale, ma una soluzione lato server (PHP) è OK.

+3

Basta ricordare, non fidarsi mai di nulla da parte del cliente. Quindi, anche se "hai rilevato" OS X 10.6.4, non hai idea se sia giusto ... – ircmaxell

risposta

1

Tutte le soluzioni lato server che verranno visualizzate si ridurranno effettivamente a utilizzare la stringa User-Agent nella richiesta.

Fare il lavoro sul lato client (JS) ha il vantaggio di essere in grado di interagire direttamente con il browser/sistema operativo. Ad esempio, jQuery's browser function, che potrebbe essere esattamente ciò di cui hai bisogno, esegue una serie di test sul DOM/browser per vedere come reagisce e quindi determina il tipo e la versione del browser in base a tali reazioni. Ci sono stati alcuni progetti per estendere la funzione del browser di jQuery per includere il rilevamento del sistema operativo, ma non li ho mai usati prima; facilmente reperibile con una rapida ricerca su Google.

Cheers.

1

l'unico suggerimento che si ha, oltre a fare un probe di rete, che non è comunque troppo affidabile, è esaminare l'intestazione User-Agent, ma non si può fare troppo affidamento su di esso, poiché chiunque può modificare il intestazioni predefinite inviate dal browser.

2

Il collegamento sottostante sembra avere il codice javascript per rilevare il SO - in basso. Come bonus ha alcune altre caratteristiche come il tipo di browser e il rilevamento della versione.

http://www.quirksmode.org/js/detect.html

HTH

+0

Sul mio Mac, 'navigator.oscpu' restituisce 'Intel Mac OS X 10.6', su un PC, non restituisce nulla. Peccato, perché è esattamente quello che voglio! – PaulAdamDavis

3

È possibile utilizzare il campo HTTP_USER_AGENT nella matrice $ _SERVER. Ad esempio, il seguente codice rileverà iPhone e Android utenti e reindirizzare in una posizione diversa (ad esempio, iTunes App Store o Android Marketplace):

$http_user_agent = $_SERVER['HTTP_USER_AGENT']; 

if (stristr($http_user_agent, "android") != FALSE) { 
    header("Location: " . ANDROID_REDIRECT); 
} 
else if (stristr($http_user_agent, "iphone") != FALSE) { 
    header("Location: " . IOS_REDIRECT); 
} 
else { 
    header("Location: " . DEFAULT_REDIRECT); 
} 

noti che ANDROID_REDIRECT, IOS_REDIRECT e DEFAULT_REDIRECT sono costanti definite con il PHP 'define' function.

19
<?php 

$user_agent  = $_SERVER['HTTP_USER_AGENT']; 

function getOS() { 

    global $user_agent; 

    $os_platform = "Unknown OS Platform"; 

    $os_array  = array(
          '/windows nt 6.2/i'  => 'Windows 8', 
          '/windows nt 6.1/i'  => 'Windows 7', 
          '/windows nt 6.0/i'  => 'Windows Vista', 
          '/windows nt 5.2/i'  => 'Windows Server 2003/XP x64', 
          '/windows nt 5.1/i'  => 'Windows XP', 
          '/windows xp/i'   => 'Windows XP', 
          '/windows nt 5.0/i'  => 'Windows 2000', 
          '/windows me/i'   => 'Windows ME', 
          '/win98/i'    => 'Windows 98', 
          '/win95/i'    => 'Windows 95', 
          '/win16/i'    => 'Windows 3.11', 
          '/macintosh|mac os x/i' => 'Mac OS X', 
          '/mac_powerpc/i'  => 'Mac OS 9', 
          '/linux/i'    => 'Linux', 
          '/ubuntu/i'    => 'Ubuntu', 
          '/iphone/i'    => 'iPhone', 
          '/ipod/i'    => 'iPod', 
          '/ipad/i'    => 'iPad', 
          '/android/i'   => 'Android', 
          '/blackberry/i'   => 'BlackBerry', 
          '/webos/i'    => 'Mobile' 
         ); 

    foreach ($os_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $os_platform = $value; 
     } 

    } 

    return $os_platform; 

} 

function getBrowser() { 

    global $user_agent; 

    $browser  = "Unknown Browser"; 

    $browser_array = array(
          '/msie/i'  => 'Internet Explorer', 
          '/firefox/i' => 'Firefox', 
          '/safari/i'  => 'Safari', 
          '/chrome/i'  => 'Chrome', 
          '/opera/i'  => 'Opera', 
          '/netscape/i' => 'Netscape', 
          '/maxthon/i' => 'Maxthon', 
          '/konqueror/i' => 'Konqueror', 
          '/mobile/i'  => 'Handheld Browser' 
         ); 

    foreach ($browser_array as $regex => $value) { 

     if (preg_match($regex, $user_agent)) { 
      $browser = $value; 
     } 

    } 

    return $browser; 

} 


$user_os  = getOS(); 
$user_browser = getBrowser(); 

$device_details = "<strong>Browser: </strong>".$user_browser."<br /><strong>Operating System: </strong>".$user_os.""; 

print_r($device_details); 

echo("<br /><br /><br />".$_SERVER['HTTP_USER_AGENT'].""); 

?> 
+0

Il browser fallirebbe per Chrome, no? Chrome ha sia 'Safari' che 'Chrome' sul suo user-agent. E.g: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, come Gecko) Chrome/31.0.1625.2 Safari/537.36' – RaphaelDDL

+0

@Gaurang Questo script mi ​​ha davvero aiutato. Una domanda a riguardo: utilizzo OS X Mavericks e restituisce "Piattaforma OS sconosciuta". Qualche idea sul perché e su come posso risolverlo? –

Problemi correlati