Foros del Web » Programando para Internet » PHP »

Problema al pasar desde "ereg()" a preg_match()

Estas en el tema de Problema al pasar desde "ereg()" a preg_match() en el foro de PHP en Foros del Web. Hola a todos, Necesito de su ayuda para salir de este paso: Tengo la siguiente funci♀n en php para identificar el navegador que usa el ...
  #1 (permalink)  
Antiguo 18/08/2010, 19:43
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 15 años, 2 meses
Puntos: 1
Problema al pasar desde "ereg()" a preg_match()

Hola a todos,

Necesito de su ayuda para salir de este paso:

Tengo la siguiente funci♀n en php para identificar el navegador que usa el cliente

Código PHP:
Ver original
  1. function GetContentSel3($sel3) {
  2.  
  3.             if ((ereg("Nav", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Gold", $_SERVER["HTTP_USER_AGENT"])) || (ereg("X11", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Mozilla", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Netscape", $_SERVER["HTTP_USER_AGENT"])) AND (!ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) AND (!ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])) AND (!ereg("Firefox", $_SERVER["HTTP_USER_AGENT"]))) $browser = "Netscape";
  4.             elseif(ereg("Firefox", $_SERVER["HTTP_USER_AGENT"])) $browser = "FireFox";
  5.             elseif(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) $browser = "MSIE";
  6.             elseif(ereg("Lynx", $_SERVER["HTTP_USER_AGENT"])) $browser = "Lynx";
  7.             elseif(ereg("Opera", $_SERVER["HTTP_USER_AGENT"])) $browser = "Opera";
  8.             elseif(ereg("WebTV", $_SERVER["HTTP_USER_AGENT"])) $browser = "WebTV";
  9.             elseif(ereg("Konqueror", $_SERVER["HTTP_USER_AGENT"])) $browser = "Konqueror";
  10.             elseif((eregi("bot", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Google", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Slurp", $_SERVER["HTTP_USER_AGENT"])) || (ereg("Scooter", $_SERVER["HTTP_USER_AGENT"])) || (eregi("Spider", $_SERVER["HTTP_USER_AGENT"])) || (eregi("Infoseek", $_SERVER["HTTP_USER_AGENT"]))) $browser = "Bot";
  11.             else $browser = "Other";
  12.  
  13.               $result = "";
  14.               $found = FALSE;
  15.            
  16.             if ($browser == "FireFox"){
  17.  
  18. /*
  19.  Continua el Script...
  20. */

Todo bien hasta que tuve que correr la aplicacion con PHP 5 x. Aqui la funcion "eregi()" es obsoleta y debo utilizar "preg_match()". Después de buscar un buen rato llegué a probar con los cambios siguientes: (puse delimitadores solo en la linea de inicio del "if" ya que si el error me lo marcaba a partir de la suiente linea ya sabria que cambios hacer en las siguientes, pero....

Código PHP:
Ver original
  1. function GetContentSel3($sel3) {
  2.             if ((preg_match('/Nav/', $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Gold/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/X11/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Mozilla/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Netscape/' $_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/MSIE/' $_SERVER["HTTP_USER_AGENT"])) AND (!ereg('/Konqueror/' $_SERVER["HTTP_USER_AGENT"])) AND (!ereg('/Firefox/' $_SERVER["HTTP_USER_AGENT"]))) $browser = "Netscape";
  3.             elseif(preg_match("Firefox", $_SERVER["HTTP_USER_AGENT"])) $browser = "FireFox";
  4.             elseif(preg_match("MSIE", $_SERVER["HTTP_USER_AGENT"])) $browser = "MSIE";
  5.             elseif(preg_match("Lynx", $_SERVER["HTTP_USER_AGENT"])) $browser = "Lynx";
  6.             elseif(preg_match("Opera", $_SERVER["HTTP_USER_AGENT"])) $browser = "Opera";
  7.             elseif(preg_match("WebTV", $_SERVER["HTTP_USER_AGENT"])) $browser = "WebTV";
  8.             elseif(preg_match("Konqueror", $_SERVER["HTTP_USER_AGENT"])) $browser = "Konqueror";
  9.             elseif((preg_match("bot", $_SERVER["HTTP_USER_AGENT"])) || (preg_match("Google", $_SERVER["HTTP_USER_AGENT"])) || (preg_match("Slurp", $_SERVER["HTTP_USER_AGENT"])) || (preg_match("Scooter", $_SERVER["HTTP_USER_AGENT"])) || (preg_match("Spider", $_SERVER["HTTP_USER_AGENT"])) || (preg_match("Infoseek", $_SERVER["HTTP_USER_AGENT"]))) $browser = "Bot";
  10.             else $browser = "Other";
  11.  
  12.               $result = "";
  13.               $found = FALSE;
  14.            
  15.             if ($browser == "FireFox"){

pero obtengo errores. El primero es

Código HTML:
Ver original
  1. Parse error: parse error in ....\SelectS.php on line 39
  2.  
  3. o sea ya en el inicio:
  4.  
  5.             if ((preg_match('/Nav/', $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Gold/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/X11/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Mozilla/' $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Netscape/' $_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/MSIE/' $_SERVER["HTTP_USER_AGENT"])) AND (!ereg('/Konqueror/' $_SERVER["HTTP_USER_AGENT"])) AND (!ereg('/Firefox/' $_SERVER["HTTP_USER_AGENT"]))) $browser = "Netscape";

Bueno, he buscado manera de resolverlo, pero no he podido.

Ojala alguien me pueda dar una mano.

Gracias.
  #2 (permalink)  
Antiguo 18/08/2010, 19:48
 
Fecha de Ingreso: agosto-2010
Mensajes: 79
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Problema al pasar desde "ereg()" a preg_match()

podes usar directamente strpos para eso o no??
  #3 (permalink)  
Antiguo 18/08/2010, 20:25
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Respuesta: Problema al pasar desde "ereg()" a preg_match()

Hola.. como va?
El primer reemplazo lo hiciste bien, pero en el resto te olvidaste la coma para separar los parametros:
if ((preg_match('/Nav/', $_SERVER["HTTP_USER_AGENT"])) || (preg_match('/Gold/', $_SERVER["HTTP_USER_AGENT"])) || ....

Ademas, para imitar el eregi(), que si mal no recuerdo no es sensible a minusculas/mayusculas, vas a tener que usar "i" como modificador del patron: "/bot/i"

Saludos!
  #4 (permalink)  
Antiguo 18/08/2010, 20:35
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Problema al pasar desde "ereg()" a preg_match()

Hola fran86,

Gracias por darte el tiempo para buscar el problema, efectivamente creo que diste en el punto. Lamentablemente no podré probarlo ahora. Apenas lo haga te contaré cómo resultó. También tienes razón en el uso de la "i".

Gracias de nuevo
  #5 (permalink)  
Antiguo 18/08/2010, 20:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 79
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Problema al pasar desde "ereg()" a preg_match()

repito que la forma correcta de hacerlo creo que es strpos...

de php.net/preg_match

Notas
Tip

No use preg_match() si solo quiere verificar si una cadena está contenida en otra cadena. Use strpos() o strstr() en su lugar ya que éstas serán más rápidas.
  #6 (permalink)  
Antiguo 18/08/2010, 20:52
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Respuesta: Problema al pasar desde "ereg()" a preg_match()

Cita:
Iniciado por sesebas Ver Mensaje
Hola fran86,

Gracias por darte el tiempo para buscar el problema, efectivamente creo que diste en el punto. Lamentablemente no podré probarlo ahora. Apenas lo haga te contaré cómo resultó. También tienes razón en el uso de la "i".

Gracias de nuevo
Por nada!

Igual me sumo a lo que te decia CloudFFVII sobre strpos/stripos, si es que tu server tiene mucha carga, o tenes TOC

Saludos!
  #7 (permalink)  
Antiguo 18/08/2010, 23:53
 
Fecha de Ingreso: enero-2009
Mensajes: 173
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Problema al pasar desde "ereg()" a preg_match()

Gracias a los dos amigos que respondieron mi consulta.

Después de lidiar un par de horas conseguí habilitar toda mi aplicación en mi laptop personal y pude llegar al punto de probar sus sugerencias... en realidad sólo la de usar "preg_match()" y funcionó sin problemas!!!

Mañana probaré la de CloudFFVII y volveré a contarles el resultado, mientras tanto podemos dar por solucionado el problema.

Gracias.

Etiquetas: pasar
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 17:00.