Foros del Web » Programando para Internet » PHP »

deteccion de navegador sin get_browser

Estas en el tema de deteccion de navegador sin get_browser en el foro de PHP en Foros del Web. Hola a todos, necesito hacer una detección del navegador que está usando el visitante de mi web. Por lo que he leido la función get_browser() ...
  #1 (permalink)  
Antiguo 09/05/2006, 03:56
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
deteccion de navegador sin get_browser

Hola a todos,

necesito hacer una detección del navegador que está usando el visitante de mi web. Por lo que he leido la función get_browser() me podía ser de ayuda pero al ejecutarla el script me da un error
Código:
Warning: get_browser(): browscap ini directive not set. in E:\web\checkBrowser.php on line 4
que parece ser debido a que no está configurado correctamente la opción de configuración browscap en php.ini. Para intentar resolver el problema me he creado este script:

Código:
<?
echo checkBrowser();
function checkBrowser(){
	$agent = strtolower($_SERVER["HTTP_USER_AGENT"]);
	echo " $agent - ";
	$Arr_brow = array("amaya", "firefox", "maxtor", "mozilla", "msie", "opera");	
	$found = false;
	while(list($c, $v) = each($Arr_brow)){
		if(strstr($agent, $v) and !$found){
			$found = true;
			return $v;
		}
	}
}
?>
que parece funcionar bien ... pero sólo lo parece. Os pongo unos ejemplos y lo veréis claro.

Si uso Firefoz como navegador obtengo:
$agent -> mozilla/5.0 (windows; u; windows nt 5.0; es-es; rv:1.8.0.3) gecko/20060426 firefox/1.5.0.3
resultado de la detección -> firefox (correcto)

Si uso Opera:
$agent -> opera/9.00 (windows nt 5.0; u; en)
resultado de la detección -> opera (correcto)

Si uso Internet Explorer:
$agent -> mozilla/4.0 (compatible; msie 6.0; windows nt 5.0; .net clr 1.1.4322)
resultado de la detección -> mozilla (incorrecto)

¿Cómo podría hacerlo bien? Muchas gracias por la ayuda

P.D. las pruebas las estoy haciendo en una máquina con Windows y luego lo publicaré en una con Linux (esto no importa, ¿verdad?) Así todo, ¿cómo podríamos hacer la detección sin get_browser()?
__________________
http://www.nosoynadie.net/

Última edición por nosoynadie; 26/07/2006 a las 12:59
  #2 (permalink)  
Antiguo 09/05/2006, 05:52
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Esa información se extrae de la cabecera HTTP "User agent", que es una cabecera que incluye el navegador cuando solicita las páginas al servidor. Por lo tanto, si el navegador omite esta cabecera o pone en ella el valor que quiera, el servidor web no tiene forma de saber en realidad de que navegador se trata. De echo, yo uso Opera, y tiene la opción de identificarse como Opera, Mozilla, o IE.
Por otro lado, parece ser que IE pone en la cabecera "User Agent" lo que vos indicaste: mozilla/4.0 (compatible; msie 6.0; windows nt 5.0; .net clr 1.1.4322). No se bien porque IE hace esto, pero creo que lei por ahí que algunos servidores bloqueaban las paginas a algunos navegadores que no las mostraban bien y para que no ocurriera esto, decidieron que IE se identificara como Mozilla (desconozco si esto se puede cambiar con alguna opción del IE).
Quizá para saber si se trata de IE tengas que analizar la cadena y verificar que aparezca el texto msie 6.0 o algo parecido.
Saludos.
  #3 (permalink)  
Antiguo 09/05/2006, 06:06
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
Pues vaya lio

Así que no me queda más remedio que 'arreglarlo' para que compruebe primero los, por decirlo de algún modo, 'casos especiales' (como el msie).

Probaré a hacerlo así y ya te cuento. Gracias por la ayuda

P.D he probado en el servidor donde lo tengo publicado y tampoco se puede usar get_browser()
__________________
http://www.nosoynadie.net/
  #4 (permalink)  
Antiguo 09/05/2006, 06:39
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Para utilizar la función get_browser(), necesitas un archivo (generalmente browscap.ini) con información acerca de los distintos navegadores. Ese archivo lo podés descargar desde:

http://www.garykeith.com/browsers/downloads.asp

Después tenes que configurar el php.ini para indicarle a php donde encontrar ese archivo. En la sección "browscap" pones:

[browscap]
browscap = tu_ruta\browscap.ini

Después reinicias el servidor y tendría que funcionar.
Ahí creo que se va a solucionar tu problema, ya que esta función te va a devolver un objeto (o un array si le indicas el segundo parámetro como true) y la propiedad "browser" de ese objeto tendría que devolverte el nombre del navegador:

Código PHP:
<?
$navegador 
get_browser();
echo 
"Navegador: ".$navegador->browser;
?>
Te recomiendo que hagas un print_r($navegador) para ver que otra información devuelve esa función.
Saludos.
  #5 (permalink)  
Antiguo 09/05/2006, 07:56
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
Cita:
Iniciado por Notwen
Para utilizar la función get_browser(), necesitas un archivo (generalmente browscap.ini) con información acerca de los distintos navegadores. Ese archivo lo podés descargar desde:
http://www.garykeith.com/browsers/downloads.asp
Hola Notwen,
el problema es que voy a publicar el proyecto en un servidor que no tiene la configuración de browscap en el php.ini y que no voy a poder modificar. Así que he de buscarme la vida para resolver el problema Gracias por la ayuda
__________________
http://www.nosoynadie.net/
  #6 (permalink)  
Antiguo 23/06/2006, 02:31
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 12 años
Puntos: 1
Hola de nuevo,

siento haber tardado tanto en postear una respuesta pero he estado liado Al final me fabriqué mi propia solución, no sé si será la mejor pero por lo menos funciona. Os invito a que la valoréis y me digáis Podéis encontrarla en Detección del navegador con php: checkBrowser() Espero vuestras respuestas
__________________
http://www.nosoynadie.net/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:01.