2010-08-09 65 views
9

He pasado un día dentro y fuera de Googeling para esto; sin suerte hasta el momento.Obtener usuarios del sistema operativo y número de versión

¿Cómo puedo obtener el sistema operativo y la versión de los usuarios? El mío sería Mac OS X 10.6.4, la PC de repuesto en la oficina sería Windows XP SP3. Ya ves a lo que me refiero.

He visto un millón y un métodos para obtener la plataforma de los usuarios solo, pero no la versión.

JS sería ideal, pero una solución del lado del servidor (PHP) también está bien.

+3

Recuerde, nunca confíe en nada del cliente. Entonces, incluso si "detectó" OS X 10.6.4, no tiene idea si eso es correcto ... – ircmaxell

Respuesta

1

Todas las soluciones del lado del servidor que verá se reducirán a usar la cadena User-Agent en la solicitud.

Hacer el trabajo en el lado del cliente (JS) tiene la ventaja de poder interactuar directamente con el navegador/sistema operativo. Por ejemplo, jQuery's browser function, que podría ser exactamente lo que necesita, ejecuta una serie de pruebas en el DOM/navegador para ver cómo reacciona y luego determina el tipo de navegador y la versión en función de esas reacciones. Ha habido algunos proyectos para extender la función de navegador de jQuery para incluir la detección de sistema operativo, pero no los he usado antes; fácil de encontrar con una búsqueda rápida en Google.

Saludos.

1

la única pista que tiene, además de hacer una prueba de red, que de todos modos no es demasiado confiable, es examinar el encabezado User-Agent, pero tampoco puede confiar demasiado en él, ya que cualquiera puede modificar el encabezados predeterminados que su navegador envía.

2

El siguiente enlace parece tener código de Javascript para detectar el sistema operativo - en la parte inferior. Como beneficio adicional, tiene algunas otras características, como el tipo de navegador y la detección de versiones.

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

HTH

+0

En mi Mac, 'navigator.oscpu' devuelve 'Intel Mac OS X 10.6', en una PC, no devuelve nada. Es una pena, porque es exactamente lo que quiero! – PaulAdamDavis

3

Usted puede utilizar el campo HTTP_USER_AGENT en la matriz $ _SERVER. Por ejemplo, el siguiente código detectará los usuarios de iPhone y Android y redirigirlos a una ubicación diferente (por ejemplo, la App Store de iTunes o Android del mercado):

$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); 
} 

Tenga en cuenta que ANDROID_REDIRECT, IOS_REDIRECT y DEFAULT_REDIRECT son constantes definidas con el 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

El navegador fallará para Chrome, ¿no? Chrome tiene tanto 'Safari' como 'Chrome' en su agente de usuario. Por ejemplo: 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/31.0.1625.2 Safari/537.36' – RaphaelDDL

+0

@Gaurang Esta secuencia de comandos realmente me ayudó. Una pregunta al respecto: uso OS X Mavericks y devuelve "plataforma de sistema operativo desconocida". ¿Alguna idea de por qué y cómo puedo arreglar eso? –

Cuestiones relacionadas