2009-03-15 17 views
18

Mi chiedevo se esiste un modo per rilevare la versione esatta del sistema operativo dal mio browser utilizzando PHP/JS/ASP?Rileva la versione del sistema operativo esatta dal browser

So di poter rilevare il tipo di sistema operativo (Windows XP, Windows Vista, OS X, ecc.) Ma devo rilevare la versione esatta: Vista Business, Vista Ultimate, Windows XP Home, Windows XP Pro, ecc. ..

risposta

25

Risposta breve: Non è possibile.

Risposta lunga:

Tutto quello che è l'informazione nell'intestazione HTTP User-Agent, che di solito contiene il nome del sistema operativo e la versione.

In genere, i browser in esecuzione su Mac OS e Linux inviano informazioni sufficienti per identificare il sistema operativo esatto. Ad esempio, ecco la mia intestazione User-Agent:

Mozilla/5.0 (X11; Linux x86_64; U en-US; rv: 1.9.0.7) Gecko/2.009.030,423 mila Ubuntu/8.10 (Intrepid) Firefox/3.0. 7

Si può vedere che sto usando Ubuntu 8.10 Intrepid Ibex.

Ed ecco cosa Firefox e Safari 4 Beta rapporto sul mio 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; it-it) AppleWebKit/528,16 (KHTML, come Gecko) Version/4.0 Safari/528,16

di Windows i browser, d'altra parte, di solito riportano solo la versione del sistema operativo e non il pacchetto specifico (Pro, Affari, ecc.):

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

+0

Forse è possibile tramite Flash? –

+2

@Roy: forse, ma non ci scommetterei. –

+0

E nota che anche questo non è infallibile. Ad esempio, cambiare la stringa user-agent per segnalare qualcos'altro è banale in Firefox (download plugin) e quasi banale in IE (modifica del registro). –

1

Non credo che sarete in grado di differenziare diverse versioni di Vista, ma si dovrebbe essere in grado di ottenere il sistema operativo dalla proprietà piattaforma dell'oggetto navigator. Probabilmente dovrai analizzarlo, o differenziarti in base al suo contenuto.

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

Vedi www.w3schools.com tutorial per un example che mostrano come ottenere tutte le proprietà del navigatore.

EDIT:

Per ottenere l'esatta versione, si può essere in grado di sviluppare un controllo ActiveX (solo Windows) o applet Java e utilizzare l'oggetto java.lang.System per visualizzare le proprietà del sistema attuale. Potrebbe essere possibile ottenere informazioni sufficienti dal browser per sistemi non Windows e utilizzare il controllo solo per i sistemi Windows. Non ho provato questo, quindi avresti bisogno di sperimentare per vedere se avrebbe funzionato. Devo credere che il controllo ActiveX di Microsoft per Microsoft Update sia in grado di rilevare la versione esatta del sistema e il software installato affinché funzioni.

+0

Come hai detto, questo non aiuterà a differenziare le versioni secondarie, ma grazie per lo snippet :-) –

1

Si dovrebbe davvero cercare di evitare di fare qualcosa del genere a meno che non sia assolutamente necessario per la funzionalità dell'applicazione web.

essere consapevoli del fatto che:

Non tutte le richieste possono provenire da un client in esecuzione su Windows.

Non tutte le richieste possono provenire da un client che supporta JavaScript.

L'intestazione user-agent potrebbe non essere presente nella richiesta.

Ciò che è nell'intestazione user-agent può essere fuorviante.

Un'applicazione Web ben progettata dovrebbe fornire contenuto e funzionalità complete indipendentemente dall'intestazione dell'agente utente della richiesta o se il client supporta javascript o qualsiasi altra estensione clientide.

+0

Grazie, lo terrò in mente. –

+4

-1. Non risponde alla domanda OPs. Invece, dà un'opinione non richiesta. – maxedison

+0

È utile informazioni sulla domanda, ma non risponde alla domanda stessa (+0). Sono d'accordo con te, ma come S.O. ha delle differenze, alcune volte è necessario controllarlo: ad esempio: windows/linux usa Ctrl per multi-selezione, mac usa bowen-knot, se vuoi spiegarlo correttamente all'utente, puoi: 1) spiegare tutto a entrambi , 2) testare il sistema operativo. –

1

Come altri hanno già detto, no, non in modo affidabile.

Questa è la ragione per cui, ad esempio jQuery è passato a un browser-capacità sistema (per mancanza di una parola migliore) invece di un sistema di browser sniffing per E'funzionalità.

+0

Le caratteristiche del browser o lo sniffing del browser come si dice sono correlate al BROWSER, non correlate a S.O. Ad esempio, Firefox 24 ha le stesse funzionalità su Linux, Mac o Windows. Questa domanda riguarda S.O., non i browser. –

2

in Classic ASP e ASP.NET utilizzare

Request.ServerVariables("HTTP_USER_AGENT") 

Questo funziona meglio in quanto non è interpretato codice, questo è in esecuzione sul server.

+0

sempre buono per avere codice di lavoro o suggerimento per quale proprietà da esaminare – MikeJ

17

Dopo un po 'googling ho trovato questo codice e sembra funzionare bene, (non rileva se Unix)

<?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

Non proprio quello che voleva fare però è? :) – willcodejavaforfood

+1

Questo non rileverà il pacchetto esatto del sistema operativo (diciamo xp home vista ultimate) di windows – Ranjith

+0

in più non rileva il sistema operativo mobile, che è abbastanza richiesto al giorno d'oggi –

14

// questo vi aiuterà a

$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

Dovrebbe essere accettata come risposta. –

1

ho creato una funzione jQuery che fa questo. In questo modo possiamo monitorare tutto il sistema operativo utilizzando navigator.

speranza che qualcuno otterrà l'aiuto di questo:

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

Questo potrebbe essere il modo più semplice:

Scarica libreria dal http://mobiledetect.net

Mettere Mobile_Detect.php per 'biblioteche' se si utilizza CI o semplicemente includilo.

utilizzare questo codice in 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) 

documentazione Ricerca sulla http://dwij.co.in/mobile-os-detection-in-php-codeigniter

Problemi correlati