Cuando un cliente nos pide que desarrollemos una versión de su web adaptada a dispositivos móviles, lógicamente, quiere que al entrar con su móvil vea directamente la página web adaptada. Pues bien, hacer esto en PHP está tirao, sólo hace falta incluir una pequeña función en la cabecera de nuestro fichero index.php
La función, que lee las cabeceras del navegador para saber con qué dispositivo navega, se llama esMovil(), hay que insertar esta función o la librería que la contiene en la primera línea de nuestro script index.php
function esMovil(){
return eregi( 'ipod|iphone|ipad|android|opera mini|blackberry|palm os|windows ce|Bada|Windows Phone|Symbian', $_SERVER['HTTP_USER_AGENT'] );
}
Esta función es capaz de detectar si el navegador del visitante pertenece a un dispositivo móvil, ahora simplemente tenemos que añadir un condicional al principio de nuestro fichero index.php para filtrar a los visitantes según el dispositivo que utilizan:
if( esMovil() AND $_SERVER['REQUEST_URI']=='/'){
header( 'location:/versionmovil/' );
exit();
}
Es importante recordar que esta verificación hay que hacerla al comienzo del script, la función header location de PHP no funcionará si ya hemos mostrado algo de código HTML. Recomiendo incluir la función en la primera línea y esta verificación justo a continuación. En caso de que estén utilizando un dispositivo móvil, los redireccionará a: http://www.midominio.com/versionmovil
Este script, detecta los navegadores por defecto de los siguientes dispositivos móviles (probado a 05/10/2010):
- iPod
- iPhone
- iPad
- Android
- Blackberry
- Palm OS
- Windows móvil
- Symbian
Además, es capaz de detectar si el dispositivo está navegando con la versión para móviles de Opera, Opera Mini.
Agradezco a @davidru85 su tweet por ayudarme a mejorar la función.
Agradezco a @davidru85 su tweet por ayudarme a mejorar la función.



¿Windows CD o Windows CE? ;)
ResponderSuprimirGracias David! Windows CE, me había colado.
ResponderSuprimirBuenas, estupenda función que he usado! Aqui os dejo más identificadores de plataformas móviles para hacerla más completa:
ResponderSuprimirandroid|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino
Saludos.
@Javier gracias por completar la función
ResponderSuprimirEs posible usar esto en un blog de Blogger? es que recibo muchas quejas de que mi blog se ve mal en los móviles y quiero hacer una versión móvil, el problema es que no sé usar lo del post :\ si acaso se puede... ¿Alguien puede darme una pista de cómo hacerlo?
ResponderSuprimiralguien puede escribir el texto completo que tendría que escribir en index.php? Por favor, no tengo ni idea...
ResponderSuprimirGracias, simple y directo, me encanta.
ResponderSuprimirHola:
ResponderSuprimirintersante articulo, muchas gracias por publicarlo, hace tiempo hicimos algo similar, pero ahora, nos surge otra situación:
¿que pasa si ahora, estando en la versión movil, requerimos darle al visitante la posibilidad de elegir "ver la versión completa"?
con este script, -y estando dentro de cms- indudablemente la petición pasaria por el index y seria nuevamente redireccionado a la versión movil.
¿como podriamos evitar que la "segunda vez" que entre al sitio, pasara por este script?
el punto es: que la primera vez, si entra por un movil, el sitio lo redireccione automaticamente, pero despues, si el elige la versión completa, pueda verla.
esto desde un cms (joomla) en el que todas las peticiones pasan por el index.php
Gracias y esperamos alguna idea al respecto.
Hola Alfredo, bastaría con añadir una variable movil a la url y agregar esta condición a la primera línea.
ResponderSuprimirif( esMovil() AND $_SERVER['REQUEST_URI']=='/' AND $_GET["movil"]=='si')
Para evitar que haga esta redirección tendríamos que añadir la variable no al comienzo del script, este dato lo sacaríamos de la base de datos de preferencias del usuario.
Bueno hay les va un tip:
ResponderSuprimirLa funcion ereg() y eregi() ha sido suprimida de las versiones de PHP...
Por eso me está tirando el error eregi() is deprecated ...
Existe alguna otra función que se pueda utilizar al respecto ???
Me parece que por lo que he investigado si les marca el error eregi() is deprecated...
ResponderSuprimirBasta con migrar la funcion a
preg_match
Ahora el asunto es que va todo bien... pero la página no me redirecciona....
Que podrá ser ? no funciona el script ???
a mi no me marcó ningún error, y me funciona bastante bien, muchas gracias. :)
ResponderSuprimir