Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/06/2010, 23:46
fernandosg
 
Fecha de Ingreso: julio-2009
Mensajes: 55
Antigüedad: 14 años, 9 meses
Puntos: 0
Como detectar el sistema operativo??

Saludos.
Bueno, ando con una duda que tengo desde hace tiempo, quiero crear una pagina, en la pagina hay ciertos elementos que quiero mostrar determinadamente al usuario, dependiendo de su sistema operativo.

Navegando por la web,me encontre con un script , que el autor llama Agenteweb
Código:
<?php


error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);





class AgenteWeb{



  private $SO        = "";
  private $navegador = "";
  private $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 k el identificador se puede trucar...(OPERA CAN BE spoofed as MSIE 6)
// si no te lo crees miralo pone MSIE BLABLA Opera ...
	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"; // ? no se k robot es
	elseif (ereg("Spider",  $agente)) $robot = "Bot"; // ? no se k robot es
	elseif (ereg("Infoseek",$agente)) $robot = "Bot"; // ? no se k robot es
	elseif (ereg("Slurp",   $agente)) $robot = "Bot"; // ? no se k robot es
	elseif (ereg("bot",     $agente)) $robot = "Bot"; // ? no se k robot es
	else  $robot="Otro";

return $robot;
}



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


	 public function parseaAgente(){

		$this->SO       = $this->reconocedorSistemaOperativo ($this->agente);
		$this->navegador= $this->reconocedorNavegador($this->agente);

	}








/*
 * Recupera el nombre de la imagen correspondiente al navegador
*/
  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;

}

/*
 * Recupera el nombre de la imagen correspondiente al sistema operativo
*/
  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;


}













public function __destruct(){

}




}


?>
Dentro del cuerpo de mi pagina, yo puse los datos correspondientes para hacer el llamado ( el codigo anterior se guarda en Agenteweb.php)

El codigo quedaria algo asi:
Código:
<?php
require "AgenteWeb.php"; 
 $agenteWeb = new AgenteWeb(); 
 $agenteWeb->setAgente($_SERVER['HTTP_USER_AGENT']); 
 $agenteWeb->parseaAgente(); 
 $so             = $agenteWeb->getSO(); 

if ($so = "Windows NT 5.1" ){ ?>
<div id="prueba">windows</div>
<?
} elseif($so = "Linux") { ?>
<div id="prueba">linux</div>
<? } else { ?>
S
<?
}
?>
Pero simplemente no me vota lo correspondiente, solo el primero, en este caso windows, siendo que yo uso Linux.
El codigo lo compare con el texto correspondiente la variable $so, no se si sea asi, o que es lo que me falla.

¿Alguien sabe como arreglarlo?