Como detectar el navegador y el SO y mostrarlo con PHP
Tuesday, August 26, 2008 20:33El seguimiento de los visitantes de nuestros sitios webs es un paso muy importante si nos tomamos en serio el análisis de su tráfico y la forma de optimizar nuestras páginas para obtener más visitantes.
Hay muchas razones por las cuales es necesario crear un pequeño script que nos posiblite realizar un seguimiento de nuestros visitantes.
En este tutorial voy a crear una pequeña clase en PHP que nos ayudará a reconocer el navegador y el sistema operativo del agente web (navegador normalmente) que usa un usuario (o robot web) para visitar nuestra página.
La clase se llamará AgenteWeb y su uso será el siguiente:
require "src/utiles/AgenteWeb.php"; $agenteWeb = new AgenteWeb(); $agenteWeb->setAgente($_SERVER['HTTP_USER_AGENT']); $agenteWeb->parseaAgente(); $so = $agenteWeb->getSO(); $navegador = $agenteWeb->getNavegador(); $imagenNavegador= $agenteWeb->getImagenSrcNavegador(); $imagenSO = $agenteWeb->getImagenSrcSO();
<?php error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); class AgenteWeb{ private $SO = ""; //Sistema Operativo private $navegador = ""; //Navegador private $agente = ""; //Agente
Tendrá un método que reconocerá el sistema operativo y otro al navegador a través del parámetro agente.
public function reconocedorSistemaOperativo($Agente){ if (ereg("Windows NT 5.1", $Agente)) $sistemaOperativo = "Windows XP"; elseif (ereg("Windows NT 5.0", $Agente)) $sistemaOperativo = "Windows 2000"; elseif (ereg("Win98 ", $Agente)) $sistemaOperativo = "Windows 98"; elseif (ereg("Win", $Agente)) $sistemaOperativo = "Windows ??"; elseif ( (ereg("Mac", $Agente)) || (ereg("PPC", $Agente))) $sistemaOperativo = "Macintosh"; elseif (ereg("Debian", $Agente)) $sistemaOperativo = "Debian"; elseif (ereg("Linux", $Agente)) $sistemaOperativo = "Linux"; elseif (ereg("FreeBSD", $Agente)) $sistemaOperativo = "FreeBSD"; elseif (ereg("SunOS", $Agente)) $sistemaOperativo = "SunOS"; elseif (ereg("IRIX", $Agente)) $sistemaOperativo = "IRIX"; elseif (ereg("BeOS", $Agente)) $sistemaOperativo = "BeOS"; elseif (ereg("OS/2", $Agente)) $sistemaOperativo = "OS/2"; elseif (ereg("AIX", $Agente)) $sistemaOperativo = "AIX"; else $sistemaOperativo = "Desconocido"; return $sistemaOperativo; } public function reconocedorNavegador($agente){ //primero tenemos k conocer si se trata de opera!!! //ya que el identificador de este navegador a veces se puede trucar...(OPERA CAN BE spoofed as MSIE 6) if (eregi("Opera( )*(/){0,1}([0-9]+)(\.([0-9])+)*", $agente,$browser)); // son validos Opera/7.54 Opera/8 Opera/7.23 Opera 6.2 elseif(eregi("Netscape([0-9]*)( )*(/){0,1}([0-9]+)(\.([0-9])+)*", $agente,$browser)); //son validos Netscape/7.02 Netscape6/6.2.1 elseif(eregi("MSIE ([0-9]+)(\.([0-9])+)*", $agente,$browser)); //son validos MSIE 6.0 MSIE 5.0 MSIE 5.5 elseif(eregi("Lynx", $agente,$browser)); elseif(eregi("WebTV", $agente,$browser)); elseif(eregi("Galeon/([0-9]+)(\.([0-9])+)*", $agente,$browser)); //Galeon/2.2.2 elseif(eregi("Konqueror/([0-9]+)(\.([0-9])+)*", $agente,$browser)); //konqueror/2.2.2 konqueror/3.1 elseif(eregi("Firefox( )*(/){0,1}([0-9]+)(\.([0-9])+)*", $agente,$browser)); //Firefox/0.9 Firefox/0.10.1 elseif(eregi("Iceweasel( )*(/){0,1}([0-9]+)(\.([0-9])+)*", $agente,$browser)); //IceWeasel/0.9 Firefox/0.10.1 elseif(eregi("Firebird( )*(/){0,1}([0-9]+)(\.([0-9])+)*", $agente,$browser)); //Firebird/0.7 Firebird/0.10.1 elseif(eregi("Safari", $agente,$browser)); //Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/125.4 (KHTML, like Gecko) Safari/125.9 elseif ((eregi("Gecko", $agente)) ||(eregi("X11", $agente)) ||(eregi("Mozilla",$agente)) ||(eregi("U", $agente))) $nombre[0] = "Mozilla"; elseif(eregi("WAP", $agente,$browser)); else $nombre[0]="Otro"; eregi("([a-z]+)", $browser[0],$nombre); //conseguimos el nombre eregi("([0-9]+)(\.([0-9])+)*", $browser[0],$version); //conseguimos la version $navegador="${nombre[0]} ${version[0]}"; //separamos el nombre y la version por un espacio return $navegador; }
public function reconocerRobot($agente){ if (ereg("Google", $agente)) $robot = "Google"; //Googlebot/2.1 (+http://www.google.com/bot.html) elseif (ereg("Yahoo", $agente)) $robot = "Yahoo"; //Mozilla/5.0 (compatible; Yahoo! Slurp; http://www.webmasterworld.com/red.cgi?f=21&d=8530&url=http://help.yahoo.com/help/us/ysearch/slurp) elseif (ereg("msnbot", $agente)) $robot = "MSN"; //msnbot/0.11 (+http://search.msn.com/msnbot.htm) elseif (ereg("Scooter", $agente)) $robot = "Bot"; // ? elseif (ereg("Spider", $agente)) $robot = "Bot"; // ? elseif (ereg("Infoseek",$agente)) $robot = "Bot"; // ? elseif (ereg("Slurp", $agente)) $robot = "Bot"; // ? elseif (ereg("bot", $agente)) $robot = "Bot"; // ? else $robot="Otro"; return $robot; }
Y los setters and getters correspondientes:
public function getSO(){ return $this->SO; } public function getNavegador(){ return $this->navegador; } public function getAgente(){ return $this->agente; } public function setAgente($agente){ $this->agente=$agente; } public function setSO($SO){ $this->SO=$SO; } public function setNavegador($navegador){ $this->navegador=$navegador; }
Llamada que realiza el proceso princial de reconocer el navegador y el sistema operativo
public function parseaAgente(){ $this->SO = $this->reconocedorSistemaOperativo ($this->agente); $this->navegador= $this->reconocedorNavegador($this->agente); }
Obtiene la imagen correspondiente al navegador reconocido
public function getImagenSrcNavegador(){ $img="question.gif"; eregi("([a-z]+)", $this->navegador,$nombre); //conseguimos el nombre switch ($nombre[0]) { case "Netscape" :$img='netscape.gif'; break; case "Galeon" :$img='galeon.gif'; break; case "Firefox" :$img='firefox.gif'; break; case "Firebird" :$img='firebird.gif'; break; case "Iceweasel" :$img='iceweasel.gif'; break; case "Mozilla" :$img='mozilla.gif'; break; case "MSIE" :$img='explorer.gif'; break; case "Konqueror" :$img='konqueror.gif'; break; case "Opera" :$img='opera.gif'; break; case "Lynx" :$img='lynx.gif'; break; case "Bot" :$img='altavista.gif'; break; case "WAP" :$img='pdaphone.gif'; break; case "Otro" :$img='question.gif'; break; } return $img; }
Obtiene la imagen correspondiente al sistema operativo reconocido
public function getImagenSrcSO(){ $img ="question.gif"; switch ($this->SO ) { case "Windows ??" :$img='windows.gif'; break; case "Windows XP" :$img='windowsXP.gif'; break; case "Windows 2000" :$img='windows2000.gif'; break; case "Windows 98" :$img='windows98.gif'; break; case "Macintosh" :$img='mac.gif'; break; case "Linux" :$img='linux.gif'; break; case "Debian" :$img='debian.jpg'; break; case "FreeBSD" :$img='bsd.gif'; break; case "SunOS" :$img='sun.gif'; break; case "IRIX" :$img='irix.gif'; break; case "BeOS" :$img='be.gif'; break; case "OS/2" :$img='os2.gif'; break; case "AIX" :$img='aix.gif'; break; case "Desconocido" :$img='question.gif'; break; } return $img; }
Fin de la clase
public function __destruct(){ } } ?>
He dejado en la sección de descargas las imagenes de los navegadores y de los sistemas operativos.
Espero que os sirva de ayuda esta pequeña clase.
Descárgate el código entero
Alejandro says:
August 19th, 2010 at 1:31 am
Y podria reconocer si es vista a traves de un movil nokia, samsung o iphone?,…
Gracias
deckerix says:
August 19th, 2010 at 8:32 am
Dependerá del agente de usuario configurado en el navegador de cada dispositivo. Supongo que incluirán algo para poder distinguirlos