Publicado por : Ignacio Cisneros martes, 5 de octubre de 2010
COMPARTE →




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.

{ 24 comentarios... read them below or Comment }

  1. Gracias David! Windows CE, me había colado.

    ResponderEliminar
  2. Buenas, estupenda función que he usado! Aqui os dejo más identificadores de plataformas móviles para hacerla más completa:

    android|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.

    ResponderEliminar
  3. @Javier gracias por completar la función

    ResponderEliminar
  4. Es 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?

    ResponderEliminar
  5. alguien puede escribir el texto completo que tendría que escribir en index.php? Por favor, no tengo ni idea...

    ResponderEliminar
  6. Hola:

    intersante 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.

    ResponderEliminar
  7. Hola Alfredo, bastaría con añadir una variable movil a la url y agregar esta condición a la primera línea.

    if( 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.

    ResponderEliminar
  8. Bueno hay les va un tip:

    La 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 ???

    ResponderEliminar
  9. Me parece que por lo que he investigado si les marca el error eregi() is deprecated...

    Basta 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 ???

    ResponderEliminar
  10. a mi no me marcó ningún error, y me funciona bastante bien, muchas gracias. :)

    ResponderEliminar
  11. Funciona pertectamente utilizando la funcion
    y declarando en una variable los dispositivos moviles.
    return preg_match($variable, $_SERVER['HTTP_USER_AGENT']);

    ResponderEliminar
    Respuestas
    1. viejo... me podria dar una mano con eso de la funcion y la variable.... dejo mi correo.. uruvenz78@hotmail.com

      Eliminar
  12. Hola a Todos. Que pasa si el index es html y no php?????Gracias

    ResponderEliminar
    Respuestas
    1. chequeaq esto ...
      http://vitaminaweb.com/redireccion-301-automatica-a-versiones-web-moviles-para-iphone-blackberry-o-palm_357

      Eliminar
  13. no funcionaria,xq estas leiendo los valores que ha detectado el servidor por eso usas php, pero lo podrias hacer en html pero con JAVASCRIPT :D

    ResponderEliminar
  14. Excelente! muy buen aporte!

    ResponderEliminar
  15. no me funciona. pon el codigo entero por favor, con etiquetas

    ResponderEliminar
  16. Hola amgigo una pregunta, tengo una radio online, y quisiera que aparezca en el movil, osea de aparecer aparece, pero no repoduce el sonido como en un navegador normal de pc, usando el opera mini tampoco, entonces que puedo hacer, porfavor ayuda! :D

    ResponderEliminar
    Respuestas
    1. los smartphone no tienen la capacidad de reproducir el sonido de las paginas web, un ejemplo, youtube, cuando quieres ver un video se plasma un reproductor en tu celular ya que directo no se puede, ahora para que se escuche tu rario en los smartphone, lo que nosotros hacemos (http://blackradio.com.mx) es tener una cuenta e TuneIn, es una aplicacion que se encuentra disponible en todos los sistemas operativos de moviles, si necesitas ayuda me puedes contactar en esa pagina.

      Eliminar
  17. Bueno agradezco el aporte que nos a brindado David, esto me va ha servir de mucho.
    Para aquellos que tengan problemas con la funcion ereg() de PHP los invito a que visiten el sitio oficial de PHP al parecer a quedado en versiones anteriores de php 5.0, se esta utilizando preg_match();

    ResponderEliminar
  18. hola, me funciona perfectamente, el unico problema que me da es que no me diferencia entre tablets y moviles android

    ResponderEliminar
  19. Que codigo pondría si le quiere ofrecer al usuario la opciòn de regresar a la versión clásica. Salidos y Gracias.

    ResponderEliminar

Con la tecnología de Blogger.

- Copyright © Todos contra Google - El blog de Ignacio Cisneros - icisneros - Original design by Johanes Djogan modified by Ignacio Cisneros-