Foros del Web » Programando para Internet » PHP »

Obtener version Firefox con PHP

Estas en el tema de Obtener version Firefox con PHP en el foro de PHP en Foros del Web. Hola, tengo una web y estoy interesado en saber los usuarios que utilizan Firefox y en concreto que versiones, puesto que algunos css y javascript ...
  #1 (permalink)  
Antiguo 27/08/2006, 10:04
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 12 años, 4 meses
Puntos: 7
Obtener version Firefox con PHP

Hola, tengo una web y estoy interesado en saber los usuarios que utilizan Firefox y en concreto que versiones, puesto que algunos css y javascript solo funcionan a partir de la 1.5.0.4 de Firefox.

Mediante este script PHP:
Código PHP:
<?
$navegador
=$_SERVER["HTTP_USER_AGENT"];
echo 
"Tu navegador es: $navegador";

if(
ereg("Firefox"$_SERVER["HTTP_USER_AGENT"])){
$navegador="Firefox";
}else{
$navegador="NO COMPATIBLE";
}

echo 
"<br><br>Test: $navegador";
?>
he conseguido identificar el navegador y reconocer cuando es Firefox.

Ahora lo que no se como hacer es obtener la version de Firefox. En el HTTP_USER_AGENT, veo que pone siempre al final Firefox/LA VERSION. Por ejemplo: Firefox/1.5.0.6.

Como prodria obtener ese 1.5.0.6?

Gracias, un saludo.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #2 (permalink)  
Antiguo 27/08/2006, 10:12
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Puedes mirar las funciones de cadenas

Un ejemplo

Código PHP:
$version substr($_SERVER["HTTP_USER_AGENT"], strpos($_SERVER["HTTP_USER_AGENT"], 'Firefox/') + 8);

echo 
$version
  #3 (permalink)  
Antiguo 27/08/2006, 10:16
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Hola, otra idea sería usar la funcion explode. Una vez detectes que el navegador es Firefox puedes explotar esa cadena por el "/".

por ejemplo:

Código PHP:
$navegador "Firefox/1.5.0.6";
$version explode("/"$navegador);
echo 
$version[1]; // En principio debería imprimir "1.5.0.6" 
Saludos
  #4 (permalink)  
Antiguo 27/08/2006, 10:26
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 12 años, 4 meses
Puntos: 7
Tralara, tu opcion es buena, pero el HTTP_USER_AGENT suele tener siempre mas de una /. Por eso la he descartado, aunque se podria hacer por ahi, pero saldria mas largo.

Sin embaro la opcion de Belero si es justo lo que necesitaba. Ahora me asalta otra duda. Como quiero comparar con la version 1.5.0.4 (si es menor que muestre "No compatible" y si es mayor o igual que muestre "Compatible"), pues no se si utilizar un explode para la variable version tal que:

$version=explode($version,".");
y luego meter cada parametro del array en un string

(no se si se puedan extraer de alguna forma mas rapida los puntos)

y que me arrojaria "1504" y compararlo...pero claro si utilizan la 1.0.7 por ejemplo, saldria "107" (que si veria que es mayor", pero en una 1.5.0.0, el valor que saldria es "15", que tambien seria menor, pero no real. No se si me explico. Lo que quiero es que se valide bien para todos los casos comparandola con la 1.5.0.4
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #5 (permalink)  
Antiguo 27/08/2006, 10:41
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Si, la opción de Belero es mejor, me adelanté y no vi su respuesta...

Pensaré en el tema de la versión!

Saludos
  #6 (permalink)  
Antiguo 27/08/2006, 10:48
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Probaremos con una pequeña función:

compararVersion
$actual -> Versión actual(ej: 1.5.0.6)
$comparada -> Versión con la que la queremos comparar (ej: 1.5.0.4)

Devuelte true si la versión es igual o superior, sino devuelve false

Código PHP:
function compararVersion($actual$comparada)
{
  if(
$actual === $comparada)
  {
    return 
true;
  }

  
$actual_numeros explode("."$actual);
  
$comparada_numeros explode("."$comparada);
  
  foreach(
$actual_numeros AS $clave => $valor)
  {
    if(
$valor $comparada_numeros[$clave])
    {
      return 
true;
    }
    elseif(
$valor $comparada_numeros[$clave])
    {
      return 
false;
    }
  }
  
  return 
null;

  #7 (permalink)  
Antiguo 27/08/2006, 11:11
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 12 años, 4 meses
Puntos: 7
Llevo tiempo con PHP y no me considero un experto, pero tampoco un iniciado XD sin embargo al ver tu codigo si que me siento como un iniciado XD. Es realmente bueno.

Aunque no entiendo el triple comparador de igualdad, es decir el "===" que utilizas.

Por otro lado, estoy mas acostumbrado a utilizar los bucles como while y for, pero aqui utilizas el foreach, que est totalmente desconocido para mi. He ido php.net a buscar informacion al respecto y ahora tengo una ligera idea de foreach y creo que lo que haces es hacer una matriz separandola a traves de los puntos. Y luego vas mirando posicion a posicion si el elemento coincide. Es asi no?
Si es menor retornas false y si es menor retornas true ;)
Oks esta perfecta, solo si me puedes aclarar lo del triple igual y asi ya me puedo acostar sabiendo una cosa mas XD
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #8 (permalink)  
Antiguo 27/08/2006, 11:32
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Puedes ver aquí la documentación donde aparece el triple igual, simplemente es para asegurar el tipo de los dos valores que comparas, en esta caso quizás no sea necesario, pero pudiendo asegurarse...

Si, se comparan los números de izquierda a derecha y si alguno es mayor o menor ya se puede saber cómo es la versión.

Gracias por el comentario , aunque la verdad tampoco me considero un experto, sólo un simple aficionado, este tema de las webs abarca demasiados campos como para atender a todos.
  #9 (permalink)  
Antiguo 27/08/2006, 11:47
Avatar de Infernal  
Fecha de Ingreso: septiembre-2004
Ubicación: Tamaulipas, Mexico
Mensajes: 124
Antigüedad: 13 años, 3 meses
Puntos: 0
Claro que funciona con explode y muy bien:

Código PHP:
<?

function comparar_firefox ($ultima_version$usuario_version)
{
$firefox_ul intval(implode(explode("."$ultima_version)));
$firefox_us intval(implode(explode("."$usuario_version)));

if(
$firefox_us >= $firefox_ul)
{
    return 
true;
}
else
{
    return 
false;
}
}

$version explode("/"$_SERVER['HTTP_USER_AGENT']);
$ver_f $version[count($version) - 1];


echo (
comparar_firefox("1.5.0.7",$ver_f)) ? "Tienes la ultima Version de Firefox" "Actualiza tu Version de Firefox" ;

?>

Última edición por Infernal; 27/08/2006 a las 12:01
  #10 (permalink)  
Antiguo 27/08/2006, 12:25
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
El explode funciona bien, pero si comparas la última versión "1.5" con la del usuario "1.0.7" dice que tienes la última versión
  #11 (permalink)  
Antiguo 27/08/2006, 14:06
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 12 años, 4 meses
Puntos: 7
Siguiendo el script, he enrevesado un poco mas la funcion de php del firefox.

Lo que pretendo es que si un usuario entra a una pagina, sin utilizar firefox, o bien lo utiliza pero con una version menor a 1.5.0.4, le redireccione a otro archivo php donde indique los pasos para descargarselo.

El problema es que la pagina esta hecha con frames, y parece no funcionar correctamente, he probado con header() y los metas pero no lo consigo poner bien.

Las funciones quedan asi:
Código PHP:
<?
function compararVersion($actual$comparada)
{
  if(
$actual === $comparada)
  {
    return 
true;
  }

  
$actual_numeros explode("."$actual);
  
$comparada_numeros explode("."$comparada);
 
  foreach(
$actual_numeros AS $clave => $valor)
  {
    if(
$valor $comparada_numeros[$clave])
    {
      return 
true;
    }
    elseif(
$valor $comparada_numeros[$clave])
    {
      return 
false;
    }
  }
 
  return 
null;


function 
compararNavegador()
{
    
$navegador=$_SERVER["HTTP_USER_AGENT"];//Obtenemos todos los datos del navegador.
    
if(ereg("Firefox"$navegador))
    {
//Si es Firefox, comprobamos la version
        
$version substr($navegadorstrpos($navegador'Firefox/') + 8);
        if(!
compararVersion($version,"1.5.0.4"))//Si la version no es mayor o igual a 1.5.0.4
        
{//Redireccionamos y no mostramos nada mas de la web
            
$goto="apo_firefox.php";
            echo 
"<META HTTP-EQUIV=\"refresh\" content=\"0;URL=$goto\">";
        }
    }
    else
    {
//Si no es Firefox,Redireccionamos y no mostramos nada mas de la web
        
$goto="apo_firefox.php";
        
//echo "<META HTTP-EQUIV=\"refresh\" content=\"0;URL=$goto\">";
        
header("Location: $goto");
        exit;
    }
}
?>
Lo que haria seria llamar a comprobarNavegador() y si entrara en alguna opcion no correcta, redireccionaria la pagina y no mostrara nada mas de la anterior pagina.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #12 (permalink)  
Antiguo 27/08/2006, 14:37
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Prueba a poner la ruta completa en la redirección

Código PHP:
header("Location: http://www.google.com"); 
  #13 (permalink)  
Antiguo 27/08/2006, 15:10
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 11 años, 9 meses
Puntos: 0
basarte en el user agent es lo peor que puedes hacer para enviar css o javascript al cliente..., con respecto a css, define hojas de estilo para navegadores mas estandares que IE <= 6 (para este ultimo usa comentarios condicionales), en cuanto a javascript usa deteccion de objetos
  #14 (permalink)  
Antiguo 27/08/2006, 16:56
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Cierto foo, pero creo que lo que pretende es personalizar la web dependiendo de la versión del navegador, e invitar a que usen el firefox y a la última.
Estoy contigo en que es bueno seguir los estándares, y sobre todo, hacer páginas navegables para cualquier navegador, aunque no nos guste, sobre todo con el ie que sigue siendo el más usado.
  #15 (permalink)  
Antiguo 27/08/2006, 17:59
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 11 años, 9 meses
Puntos: 0
respondi a esto:
Cita:
puesto que algunos css y javascript solo funcionan a partir de la 1.5.0.4 de Firefox
ahi claramente quiere usar el user agent para enviar codigo especifico para cada navegador, eso como comente mas arriba no sirve de mucho.
  #16 (permalink)  
Antiguo 27/08/2006, 18:32
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 15 años, 1 mes
Puntos: 4
hay una funcion que compara versiones y es nativa de php, revisenla, quizas se ahorran código. www.php.net/version_compare
  #17 (permalink)  
Antiguo 28/08/2006, 08:08
Avatar de tralara  
Fecha de Ingreso: diciembre-2003
Mensajes: 230
Antigüedad: 14 años
Puntos: 0
Si, la opción de ArrauKano es mejor, me adelanté y no vi su respuesta...
  #18 (permalink)  
Antiguo 28/08/2006, 08:22
Avatar de Belero  
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 11 años, 3 meses
Puntos: 0
Cierto, no conocía esa función
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 22:50.