2010-02-04 21 views
5

¿Cómo obtengo el nombre del navegador usando PHP? Pensé que esto sería sencillo? Todo lo que necesito hacer es diferenciar entre IE y Firefox.PHP: obtenga el nombre del navegador

+0

Aunque es completamente posible obtener un valor (como se describe en las respuestas a continuación) para el navegador, debe tener en cuenta que el valor no es necesariamente exacto. – dnagirl

+0

** Duplicado de http://stackoverflow.com/questions/1895727/how-can-i-detect-the-browser-with-php-or-javascript/** –

Respuesta

16
if (strpos($_SERVER['HTTP_USER_AGENT'], '(compatible; MSIE ')!==FALSE) { 
    ...ie specific... 
} 

pero! ¡No!

Rara vez hay una buena razón para estar oliendo user-agent en el lado del servidor. Trae un montón de problemas, incluyendo:

  • navegadores y otros agentes de usuario que mentir acerca de lo que son, o tira el encabezado de agente de usuario por completo, o en general, hacen que sea difícil distinguir lo que el navegador real es del texto del encabezado. Por ejemplo, la regla anterior también detectará a Opera cuando esté simulando IE, e IEMobile (Windows Mobile), lo cual puede o no desear, ya que es un navegador diferente al IE de escritorio.

  • si discrimina en el agente de usuario en el servidor, debe devolver un encabezado Vary: User-Agent en la respuesta, de lo contrario los apoderados pueden almacenar en caché una versión de la página y devolverla a otros navegadores que no coincidan. Sin embargo, incluir este encabezado tiene el efecto secundario de desordenar el almacenamiento en caché en IE.

Dependiendo de qué es lo que está tratando de lograr, casi siempre existe una mejor manera de manejar las diferencias entre IE y otros navegadores en el lado del cliente, usando hacks CSS, JScript o conditional comments. ¿Cuál es el verdadero propósito para tratar de detectar IE en su caso?

+0

Exactamente. Si CURSAS con; 'CURLOPT_USERAGENT ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, como Gecko) Versión/6.0.2 Safari/536.26.17');' y poof es falso :) –

7

$ _SERVER [ 'HTTP_USER_AGENT']

7
<?php 
var_dump($_SERVER['HTTP_USER_AGENT']); 
var_dump(get_browser(null, true)); 
?> 

Lienzo:

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3 

Array 
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$ 
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9* 
    [parent] => Firefox 0.9 
    [platform] => WinXP 
    [browser] => Firefox 
    [version] => 0.9 
    [majorver] => 0 
    [minorver] => 9 
    [cssversion] => 2 
    [frames] => 1 
    [iframes] => 1 
    [tables] => 1 
    [cookies] => 1 
    [backgroundsounds] => 
    [vbscript] => 
    [javascript] => 1 
    [javaapplets] => 1 
    [activexcontrols] => 
    [cdf] => 
    [aol] => 
    [beta] => 1 
    [win16] => 
    [crawler] => 
    [stripper] => 
    [wap] => 
    [netclr] => 
) 
1

1) detector Precisa: BrowserDetection.php (Examples)

2) función primitiva:

function get_user_browser() 
{ 
    $u_agent = $_SERVER['HTTP_USER_AGENT'];  $ub = ''; 
    if(preg_match('/MSIE/i',$u_agent))   { $ub = "ie";  } 
    elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; } 
    elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; } 
    elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; } 
    elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock";  } 
    elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera";  } 
    return $ub; 
} 
+0

gracias trabajando Perfecto ! –

8

probar este código ...

<?php 
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 
    ); 
} 

// now try it 
$ua=getBrowser(); 
$yourbrowser= "Your browser: " . $ua['name']; 
echo $yourbrowser; 

?> 


salida de Firefox

Mozilla Firefox 
Cuestiones relacionadas