Detectar el navegador o browser que esta utilizando el visitante a una web resulta ser útil para ofrecer contendido de acuerdo al dispositivo que usa el usuario. Si el usuario esta utilizando un Navegador antiguo se le puede sugerir actualizarlo, otro uso podría ser una hoja de estilos de acuerdo al navegador del visitante.
Browser Detect
Browser Detect es una clase escrita en PHP que permite detectar rápidamente el navegador del usuario, para ello utiliza el User-Agent que es enviado mediante los headers.
Para utilizar esta clase, lo primero es incluir el archivo browser_class_inc.php y crear una instancia de la clase browser.
include('browser_class_inc.php'); $br = new browser();
Luego de ello podremos utilizar los siguientes métodos:
- getBrowserOS: devuelve el sistema operativo (Windows, Linux, Macintosh, OS/2, BeOS).
- whatBrowser: devuelve un array con el tipo de browser, el sistema operativo y la versión.
- isOpera: devuelve verdadero si el browser del usuario es Opera.-
- isFirefox: devuelve verdadero si se accede con Firefox.
- isKonqueror: devuelve verdadero si se utiliza Konqueror.
- isMSIE: devuelve verdadero si usamos Internet Explorer.
- isGaleon: devuelve verdadero para quienes utilizan Galeon.
- isWebTV: verdadero para visitantes con WebTV.
- isMSPIE: verdadero si se accede desde Internet Explorer de Pocket PC.
- isOmniWeb: devuelve verdadero si se usa OmniWeb.
- isPhoenix: para verificar si se utiliza Phoenix.
- isFirebird: comprueba si se accede desde Firebird.
- isLynx: verdadero para usuarios con Lynx.
- isSafari: comprueba si se accede con Safari.
- isNetscape: verdadero para usuarios de Netscape.
Entonces, podemos imprimir los datos del navegador del cliente con el siguiente código:
include('browser_class_inc.php'); $br = new browser(); print_r($br->whatBrowser());
El cual podemos ver funcionado en browser-class/demo.php. Este devolverá un resultado de la siguiente forma:
Array ( [browsertype] => Firefox [version] => 3.5.9 GTB6 [platform] => Macintosh [AOL] => )
Ejemplo Práctico
Todos los navegadores interpretan las hojas de estilos de forma diferente por lo cual crear un CSS que se muestre igual en todos los navegadores es complicado, se puede utilizar Hacks CSS pero estos hacen que no las hojas de estilos sean invalidas. Entonces una solución es enviar un CSS diferente por cada Browser. En la práctica se puede hacer dos archivos uno para Internet Explorer (el mas problemático) y otro para los demás navegadores.
<?php include('browser_class_inc.php'); $br = new browser(); ?> <html> <head> <title>CSS Demo</title> <?php if ($br->isMSIE()) { ?> <link href="css/styles-ie.css" rel="stylesheet" type="text/css"> <?php } else { ?> <link href="css/styles.css" rel="stylesheet" type="text/css"> <?php } ?> </head>
Sencillo de implementar y nos ahorrará tiempo en la detección del browser del cliente. Finalmente les dejo el archivo con el código fuente del ejemplo de este post.
[download id=»36″ autop=»false»]
Comentarios Total 20 comentarios
Publicado: 03/04/2010 4:41 am
[…] This post was mentioned on Twitter by infonomada, Programación Web. Programación Web said: Detectar el #Browser con #PHP http://goo.gl/fb/f4naY #general #html #firefox #internetexplorer #safari […]
Publicado: 10/04/2010 3:26 pm
Pues parece una solución casi perfecta, la verdad… una gran herramienta. De todas formas, me niego a realizar a desarrollos web que dependan TANTO de la versión del navegador. Eso es cavarte tu propia tumba!
Es decir, IE6 es diferente a IE7 y éste a IE8, y éste lo será del siguiente. Entonces, ¿que vas a hacer una hoja de estilos para cada versión de navegador? por cierto que también hay diferencias entre FF2 y FF3 y entre FF en Linux o FF en Windows. Y eso sin mencionar todos los otros navegadores, que no son pocos.
No sé, no me convence. Sé que no hay una única respuesta a este problema, y cada uno debe escoger su camino. Pero personalmente encuentro más sensato construir HTML y CSS que «más o menos» se vea «bien» en todos los navegadores, aunque no sea exactamente igual!
El inconveniente que tengo para sostener esto es que algunos clientes lo ven igual que yo y quieren que el diseño se vea EXACTAMENTE IGUAL en todos los navegadores! lo cuál como sabéis es realmente IMPOSIBLE. Y si fuera posible requeriría de un tiempo inabarcable. En fin… muerte a IE6! jajaja ….
Bromas a parte, ¿no piensas que frameworks como por ejemplo jQuery junto con UI pueden conseguir este «crossbrowser» sin necesidad de que el desarrollador web se «preocupe» ni se «ocupe» del «crossbrowsing», al ser el framework un lenguaje de «nivel alto»?
Sospecho que el futuro va por aquí. En realidad es lo que Adobe intentó con Flash, pero que no ha acabado de funcionar, precisamente por su caracter «propietario» de todo el asunto y la necesidad de usar (por muchos años) su plataforma de desarrollo (de pago). Pero jQuery se puede programar con un editor de texto ;)
Un saludo,
SERGI
Publicado: 08/05/2010 10:28 am
Me gustaría saber si se puede usar para detectar también la versión del navegador, pues la mayoría de veces que he tenido problemas de incompatibilidad ha sido con IE6 o menor, y quisiera colocar una hoja de estilos distinta para estos navegadores, es decir, sólo para las versiones de IE menores a 7 pero que no me afecte IE7 u IE8 ni los demás navegadores pues en todos los que he probado no he tenido problemas con el diseño de la web.
No me gustaría tener que poner una hoja CSS para todos los IE siendo que solo tengo problemas con las versiones 6 y anteriores. Si alguien pudiera decirme cómo hacerlo se los agradecería mucho. Saludos;)
Publicado: 08/05/2010 9:34 pm
Este script solo detecta correctamente el tipo de navegador que estas utilizando pero no la versión. Ahora si deseas detectar Internet Explorer 6 para agregarle estilos puedes leer Detectar Internet Explorer 6.
Publicado: 24/05/2010 5:16 pm
Muy bueno, me ha sido muy útil.
Aquí les dejo algunas ‘mejoras’ que le hice a la clase:
1. Muestra Internet Explorer en lugar de MSIE y elimina el punto y coma (;) al final del número de versión (8.0; ->8.0). Reemplazar la funcion isMSIE()
function isMSIE()
{
if(eregi("msie", $this->useragent) && !eregi("opera",$this->useragent))
{
$this->browsertype = "Internet Explorer";
$val = explode(" ",stristr($this->useragent,"msie"));
$ver = str_replace(";","",$val[1]);
//$this->browsertype = $val[0];
$this->version = $ver;
return TRUE;
}
else {
return FALSE;
}
}
2. Añadir soporte para Chrome. Agregar la función siguiente:
function isChrome()
{
if(eregi("chrome", $this->useragent))
{
$this->browsertype = "Chrome";
$val = stristr($this->useragent, "Chrome");
$val = explode("/",$val);
$val = explode(" ",$val[1]);
$this->version = $val[0];
return true;
}
else {
return FALSE;
}
}
Y ésta línea dentro de la función whatBrowser()
$this->isChrome();
Publicado: 23/06/2010 1:11 pm
Gracias Charles. Esta bueno porque se puede medificar a los navegadores basicos. Voy a probarlo a ver que tal.
Dejo el codigo del «browser_class_inc.php» agregado Chrome
http://pastebin.com/V6FDZEdU
Publicado: 12/10/2010 3:18 pm
como puedo hacer para saber si el browser es MAC y por ejemplo solo si es MAC realizar un evento, como por ejemplo si solo es MAC que me imprima echo «MAC»;
espero puedan ayudarme, un abrazo y esta bueno el aporte de todos :P
Publicado: 12/10/2010 10:30 pm
Para identificar el Sistema Operativo puedes utilizar el método getBrowserOS el cual dependiendo de tu sistema operativo devuelve: Windows, Linux, Macintosh, OS/2, BeOS.
Si deseas identificar si se esta utilizando MAC podrías hacerlo de la siguiente forma:
$br = new browser();
if ($br->getBrowserOS() == "Macintosh") {
echo "Usando MAC";
}
Publicado: 19/10/2010 11:14 am
Muy buenas!
Esta muy completa esta solucion, pero no consigo domesticarla xD
Como podria hacer para que si se usa la version 7 de ie me imprimiera «usas ie7»?
Un saludo y gracias por el aporte
Publicado: 27/12/2010 2:10 pm
Hola, estoy desarrollando un sitio y decidi mostrarle al usuario que sistema esta usando. Agregu el soporte para Chrome en la clase y el navegador en su ultima version detecta Safari, hay alguno con el mismo problema?
Publicado: 27/12/2010 2:13 pm
En realidad detecta el ultimo navegador de la funcion whatBrowser
Publicado: 27/12/2010 2:27 pm
Ya lo solucione, disculpen la ignorancia ;)
Publicado: 29/12/2010 1:37 pm
Muchas gracias, lo tenía que utilizar para un saludo de fin de año.. y la verdad que lo usaré, gracias.
Salud para un 2011 muy próspero y con salud!!. Mauro.
Publicado: 02/03/2011 12:16 pm
Gracias esta padre la clase, muy buena
Publicado: 08/09/2011 2:56 pm
Hola,
Muy buena la clase pero al menos a mi no me funciona con IExplorer 9
por alguna razon no me incluye msie en la info de UA
Lo que hice fué buscar por Trident y al perecer funciona, pero no estoy seguro que eso sea correcto, que piensas?
Saludos
Carlos
Publicado: 23/11/2011 3:26 am
Hola amigos:
Estoy preparando un proyecto para el final de un máster de diseño y necesito un PHP que cuando un usuario cargue mi página con IE6, 7 u 8, le cargue un HTML diferente, es decir, si entra con firefox, que cargue index.php, si entra con IE6, 7 u 8 que cargue index_ie.html
Necesito su ayuda, que de php no tengo ni idea.
Un saludo!
Publicado: 12/12/2011 5:24 pm
Excelente! me funcionó perfecto.
Lo que busco es agregar imagenes para border redondeados en internet explorer porque hasta ahora el IE9 no es compatible con esas funciones de CSS3. Y pues, los que utilizan Firefox, creo que estan pendiente de actualizar su navegador y tienen la última versión que si es compatible.
Publicado: 07/03/2013 2:23 pm
Muchas gracias.. me ha sido de mucho ayuda. =)
Publicado: 14/12/2013 1:55 am
hola, quiero saber como puedo detectar también la versión del sistema operativo, eg. Linux (Ubuntu 12.10) Windows (Windows 8, Windows XP SP3) o algo parecido, pliss me ayudan es pa mi tesis lo necesito saber si pueden escribe al correo para que sea mas rápido, saludos
Publicado: 14/12/2013 1:57 am
otra cosa, necesito poder detectar los errores https que dan las aplicaciones web, cualesquiera sea el error con su respectiva informacion, diga url que dio el error, linea del codigo, cosas asi
gracias porfavor escribeme los mas pronto posible