2009-03-15 7 views
18

Je me demandais s'il y a un moyen que je peux détecter la version exacte du système d'exploitation de mon navigateur en utilisant PHP/JS/ASP? Je sais que je peux détecter le type d'OS (Windows XP, Windows Vista, OS X, etc) mais j'ai besoin de détecter la version exacte: Vista Business, Vista Ultimate, Windows XP Édition Familiale, Windows XP Pro, etc. ..détecter la version exacte du système d'exploitation à partir du navigateur

Répondre

25

réponse courte: Vous ne pouvez pas.

Réponse longue:

Tout ce que vous avez est les informations contenues dans l'en-tête User-Agent HTTP, qui contient généralement le nom du système d'exploitation et la version.

Habituellement, les navigateurs fonctionnant sous Mac OS et Linux envoyer suffisamment d'informations pour identifier le système d'exploitation exacte. Par exemple, voici mon en-tête User-Agent:

Mozilla/5.0 (X11; U; Linux x86_64; fr; rv: 1.9.0.7) Gecko/2009030423 Ubuntu/8.10 (Intrepid) Firefox/3.0. 7

Vous pouvez voir que je cours Ubuntu 8.10 Intrepid Ibex.

Et voici ce que Firefox et Safari 4 Rapport Beta sur mon MacBook Pro:

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

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_6; fr-fr) AppleWebKit/528,16 (KHTML, comme Gecko) version/Safari 4.0/528,16

de Windows D'autre part, les navigateurs ne signalent généralement que la version du système d'exploitation et non le paquet spécifique (Pro, Professionnel, etc.):

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

+0

Peut-être que son possible via Flash? –

+2

@Roy: peut-être, mais je ne parierais pas dessus. –

+0

Et notez que même cela n'est pas infaillible. Par exemple, changer votre chaîne user-agent pour signaler quelque chose d'autre est trivial dans Firefox (plugin de téléchargement) et presque trivial dans IE (changement de registre). –

1

Je ne pense pas que vous serez en mesure de différencier les différentes versions de Vista, mais vous devriez être en mesure d'obtenir le système d'exploitation de la propriété de la plate-forme de l'objet navigator. Vous devrez probablement l'analyser, ou le différencier en fonction de son contenu.

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

Voir www.w3schools.com tutoriels pour un example montrant comment obtenir toutes les propriétés du navigateur.

EDIT:

Pour obtenir la version exacte, vous pouvez être en mesure de développer un contrôle ActiveX (Windows uniquement) ou Java Applet et utiliser l'objet java.lang.System pour afficher les propriétés du système actuel. Vous pouvez être en mesure d'obtenir suffisamment d'informations à partir du navigateur pour les systèmes non-Windows et utiliser le contrôle uniquement pour les systèmes Windows. Je n'ai pas essayé cela, donc vous auriez besoin d'expérimenter pour voir si cela fonctionnerait. Je dois croire que le contrôle ActiveX de Microsoft pour Microsoft Update est capable de détecter la version exacte du système et des logiciels installés pour que cela fonctionne.

+0

Comme vous l'avez dit, cela n'aidera pas à différencier les sous-versions, mais merci pour l'extrait :-) –

1

Vous devriez vraiment essayer d'éviter de faire quelque chose comme ça à moins que ce ne soit absolument nécessaire pour la fonctionnalité de l'application web.

Soyez conscient que:

Toutes les demandes peuvent provenir d'un client en cours d'exécution sur Windows.

Toutes les demandes ne peuvent pas provenir d'un client qui prend en charge JavaScript.

L'en-tête de l'agent utilisateur peut ne pas être présent dans la requête. Ce qui se trouve dans l'en-tête user-agent peut être trompeur.

Une application Web bien conçue doit fournir un contenu et des fonctionnalités complets, quel que soit l'en-tête user-agent de la demande ou si le client prend en charge javascript ou toute autre extension côté client.

+0

Merci, gardera cela dans esprit. –

+4

-1. Ne répond pas à la question OPs. Donne une opinion non sollicitée à la place. – maxedison

+0

Il s'agit d'informations utiles sur la question, mais ne répond pas à la question elle-même (+0). Je suis d'accord avec vous, mais comme S.O. a des différences, parfois il est nécessaire de le vérifier: par exemple: windows/linux utiliser Ctrl pour multi-select, mac utiliser bowen-knot, si vous voulez expliquer cela correctement à l'utilisateur, vous pouvez: 1) expliquer tout à la fois , 2) tester le système d'exploitation. –

1

Comme d'autres l'ont déjà dit, non, pas de manière fiable.

C'est la raison pour laquelle par exemple jquery est passé à un navigateur-capacités système (faute d'un meilleur mot) au lieu d'un système de renifleurs de navigateur pour ses fonctionnalités.

+0

Les cababilités du navigateur ou le reniflage du navigateur, comme vous le dites, sont liés au NAVIGATEUR, et non à S.O. A titre d'exemple, Firefox 24 dispose des mêmes fonctionnalités sur Linux, Mac ou Windows. Cette question concerne S.O., pas les navigateurs. –

2

Dans ASP classique et ASP.NET utiliser

Request.ServerVariables("HTTP_USER_AGENT") 

Cela fonctionne mieux car il est pas de code interprété, cela est en cours d'exécution sur le serveur.

+0

toujours bon d'avoir un code de travail ou une suggestion pour ce que la propriété à examiner – MikeJ

17

Après quelques googler, je trouve ce code et il semble fonctionner ok, (ne détecte pas Unix bien)

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

Pas vraiment ce qu'il voulait faire, mais est-ce? :) – willcodejavaforfood

+1

Cela ne détectera pas le paquet OS exacte (par exemple xp home vista ultime) de Windows – Ranjith

+0

plus il ne détecte pas les systèmes d'exploitation mobiles, qui sont tout à fait nécessaires de nos jours –

0

à CodeIgniter vous pouvez trouver la bibliothèque appelée « user_agent ». Cela vous donnera tout ce dont vous avez vraiment besoin. Si vous n'utilisez pas CI, vous pouvez toujours "extraire" le code de votre infrastructure. J'espère que cela pourra aider. http://codeigniter.com/user_guide/libraries/user_agent.html

14

// cela vous aidera

$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

Doit être accepté comme réponse. –

1

J'ai créé une fonction jquery qui fait cela. De cette façon, nous pouvons suivre tous les systèmes d'exploitation en utilisant navigator.

quelqu'un Hope obtenir de l'aide de ceci:

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

Cela pourrait être le plus simple:

bibliothèque Télécharger de http://mobiledetect.net

Mettre Mobile_Detect.php pour 'bibliothèques' si vous utilisez CI ou simplement l'inclure.

Utilisez ce code en 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) 

trouver la documentation sur http://dwij.co.in/mobile-os-detection-in-php-codeigniter

Questions connexes