Como detectar el navegador y el SO y mostrarlo con PHP

Tuesday, August 26, 2008 20:33

El 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&amp;d=8530&amp;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

You can leave a response, or trackback from your own site.

4 Responses to “Como detectar el navegador y el SO y mostrarlo con PHP”

  1. 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

  2. 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 :)

  3. ExEcUtOr says:

    February 13th, 2013 at 8:59 pm

    Hola disculpa soy aprendiz de php y baje el script pero no me funciona, lo invoco y solo me da como resultado el sistema operativo, como le hago para lo demas… Gracias.

  4. Sebastian says:

    June 6th, 2013 at 11:42 pm

    lee lo con esto

    getSO($_SERVER[‘HTTP_USER_AGENT’] ) ; // obtiene el SO del cliente PC
    $navegador=$AgenteWeb->getNAV($_SERVER[‘HTTP_USER_AGENT’] ) ; //obtiene el navegador si el cliente es PC
    $robot=$AgenteWeb->getRobot($_SERVER[‘HTTP_USER_AGENT’] ) ; //Obtiene el robot buscador
    echo $_SERVER[‘HTTP_USER_AGENT’]; // te da toda la info para que la puedas comparar vizualmente

    echo “SO: “.$so;
    echo “Navegador: “.$navegador;
    echo “Robot: “.$robot;
    ?>

    el detalle es que para movil lo tienes que modificar para que busque “android…”, “ios…” y demas ya que de lo contrario te arrojara “linux”, “macintoch” u “otro”.

    suerte y espero que esto les sirva.

Leave a Reply