Detectar dispositivos moviles y redireccionar PHP
Actualizado
Si tienes un sitio web y estás pensando en crear un diseño para que se visualize correctamente en dispositovos móviles, probablemente necesitaras redireccionar automáticamente a los navegadores de los dispositivos móviles para que entren directamente a la versión diseñada específicamente para estos, y que los navegadores de las pc’s de escritorio entren a tu sitio normal.

Podemos hacerlo de la siguiente manera, creamos un archivo llamado index.php, el archivo que tenias como index lo puedes renombrar (por ejemplo a escritorio.html con la extensión que tenía).
Bueno pues aquí les traigo este nuevo código reducido y completamente personalizable, coloquenlo en su index, en la cadena de $usuarios_moviles pueden quitar o agregar los que gusten para que sea redireccionado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | < ?php $es_movil=FALSE; //Aquí se declara la variable falso o verdadero XD $usuario = $_SERVER['HTTP_USER_AGENT']; //Con esta leemos la info de su navegador $usuarios_moviles = "Android, AvantGo, Blackberry, Blazer, Cellphone, Danger, DoCoMo, EPOC, EudoraWeb, Handspring, HTC, Kyocera, LG, MMEF20, MMP, MOT-V, Mot, Motorola, NetFront, Newt, Nokia, Opera Mini, Palm, Palm, PalmOS, PlayStation Portable, ProxiNet, Proxinet, SHARP-TQ-GX10, Samsung, Small, Smartphone, SonyEricsson, SonyEricsson, Symbian, SymbianOS, TS21i-10, UP.Browser, UP.Link, WAP, webOS, Windows CE, hiptop, iPhone, iPod, portalmmm, Elaine/3.0, OPWV"; //En esta cadena podemos quitar o agregar navegadores de dispositivos moviles, te recomiendo que hagas un echo $_SERVER['HTTP_USER_AGENT']; en otra pagina de prueba y veas la info que arroja para que despues agregues el navegador que quieras detectar $navegador_usuario = explode(',',$usuarios_moviles); foreach($navegador_usuario AS $navegador){ //Este ciclo es el que se encarga de detectar el navegador y devolver un TRUE si encuentra la cadena if(eregi(trim($navegador),$usuario)){ $es_movil=TRUE; } } if($es_movil==TRUE){ header('Location:http://Aquí va la URL de tu web movil'); } else{ header('Location:http://Aquí va la URL de tu web normal'); } ?> |
Hola, el script funciona super, pero tengo una duda.
Si un usuario entra desde PC, Mac o Linux, como puedo detectar a estos usuarios y redijirilos a la web que corresponde, que no sea movil ?
De Peluches viejo!!!
Uff muchas gracias, acabo de usar tu codigo PHP y lo incruste en mi HTML y todo perfectisimo, hice solo un test de prueba pero es fantastico. Funciona perfecto, gracias!
Tengo una web flash montada en html, yo entiendo que flash es un dolor de cabeza para verlo en iphon ó ipad, entonces lo que se me viene a la mente es hacer sumar en mi server otra version compatible con estos aparatitos osea ahora tendria una web para compus y otra para moviles, la pregunta es:
Como hago que cuando el usuario busque mi web desde su movil http://www.midominio.com se redirecione a la version que esta hecha para telefonos??, la idea es que me alumbren el camino tan bien que no pueda perderme, de ante mano muchas gracias por sus respuestas.
Gracias.
Y tengo el script y redirecciona a la perfeccion el problema es que me redire ciona siempre al index de la veraion movil no al link original como puedo arreglar esto
hola ya hice lo que dice ahi crear un archivo llamado index y ahora tengo mis 2 carpetas en mi servidor local q uno es el del sitio web para pc y el sitio web para movil y ya los direccione y lo ago desde mi maquina y si funciona correctamente, el problema es cuando intento acceder desde otra maquina en red o desde un dispositivo movil marca error que no fue posible encontrar el servidor, no se si podrian ayudarme y decirme poque podria ser el posible error, gracias
Hey que tal excelente esta informacion pero haora tenog una duda, si quisiera enviar esa
informacion a una base de datos para realizar una grafica de estos datos por mes,
llevar una estadisitca del tipo de navegador o dispositivo movil que se usa
como podria hacer para guardar la informacion de este php en una base de datos mysql?
Aun no lo he probado, pero lo hare y por los comentarios que vi, se que funciona. Muchas gracias por compartir!
Exitos
Viejo, gracias por la información, de mucha ayuda para estudiantes principiantes en esto =)
Muchas Gracias.
Men eres un capo viejo !!! Éxitos !!
probando!!
Yo cree un mini framework en PHP que tiene una funcionalidad parecida, usando un regex de: http://detectmobilebrowser.com/ para detectar si es un dispositivo movil, aparte de que detecta si es android o blackberry, me falta hacerle al iphone (por si alguien le interesa aportar
), aca les dejo el codigo
https://github.com/nebiros/yasc/blob/master/library/Yasc/Http/UserAgent.php
Muchas gracias, me3 funciono de perlas lo recomiendo, excelente ayuda.
No funciona con las versiones del Explorer, que podria modificarle???
$valor){
if(strpos(trim($strNavegadorUsuario),trim($valor))){ // para versiones de php de la 5.3 en adelante
//if(eregi(trim($strNavegadorUsuario),$valor)){ // Esta función ha sido declarada OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.
$bolMovil = true;
break;
}
}
if($bolMovil == true){
//header(‘Location:http://Aquí va la URL de tu web movil’);
echo(“es movil: “. $strNavegadorUsuario);
}
else{
//header(‘Location:http://Aquí va la URL de tu web normal’);
echo(“es pc: “. $strNavegadorUsuario);
}
?>
Perfecto, me funcionó a la primera…. es lo que necesitaba, me has quitado varios dolores de cabeza…. saludos
porque me sale este error??:
Esta página web tiene un bucle de redireccionamiento
La página web http://pagodaestudio.com/ ha realizado demasiados redireccionamientos. Para solucionar el problema, elimina las cookies de este sitio o permite las cookies de terceros. Si el problema persiste, es posible que se trate de un error de configuración del servidor y no de un problema relacionado con tu ordenador.
A continuación se detallan algunas sugerencias:
Vuelve a cargar esta página más tarde.
Más información sobre este problema.
Error 310 (net::ERR_TOO_MANY_REDIRECTS): Demasiados redireccionamientos.
Buenos días, verás no soy muy ducho en estos temas, a ver yo tengo un html que llama a un swf en el servidor, con lo que con dreamweaver cs5.5 me he creado una versión de la web para movil, en jquery, y que me la guarda como html5, qué he de hacer con ese código, porque creo un php (index.php), pego el código y a continuación inserto el swf pero al visualizarlo sólo me detecta el código. ¿He de preservar el index.html?
Gracias de antemano
eregi está deprecada y no me funciona.. en su lugar en el ciclo usé:
foreach($navegador_usuario AS $navegador){ //Este ciclo es el que se encarga de detectar el navegador y devolver un TRUE si encuentra la cadena if(strpos(trim($usuario),trim($navegador))){ $es_movil=TRUE; } }para los que tienen el error de “header information”, vean que esten poniendo esta seccion de codigo al principio de sus .php… no pueden poner ningun tipo de “echo” antes de esto.
Perfecto amigo !!!
Me ha funcionado a la primera, muchas gracias
Me sirvio de manera espectacular! muchas gracias!
Funciona perfectamente, gracias de antemano.
Alguien lo tien en ASP o en HTML
gracias por el aporte
Hola, encontré algunos códigos que tal vez te puedan servir:
ASP
< %dim u,b
set u=Request.ServerVariables("HTTP_USER_AGENT")
set b=new RegExp
b.Pattern="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"
b.IgnoreCase=true
b.Global=true
if b.test(u) then response.redirect("http://mi_web_movil.com") end if
%>
ASP.NET
< %Dim u As String = Request.ServerVariables("HTTP_USER_AGENT")
Dim b As New Regex("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", RegexOptions.IgnoreCase)
If b.IsMatch(u) Then Response.Redirect("http://mi_web_movil.com")
%>
Muy buen post! claro y sencillo.
Gracias por la ayuda!
Hola. no me funciona
Hola, podrías darme más información??
Hola
He puesto en el php tal como dicen y nada
Estoy usando magento commerce
Alguien que me oriente.
salu2
Hola, nunca e usado magento, pero normalmente esos sistemas se usan con plantillas o temas que le dan la apariencia deseada al front office de tu aplicación, por lo que el código lo podrías colocar en el header de tu plantilla y con eso debería funcionar, ahora también, puedes usar el .htaccess pero debes tener cuidado por que es probable que magento haya modificado este archivo.
El código en .htaccess es:
RewriteEngine OnRewriteBase /
RewriteCond %{HTTP_USER_AGENT} 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 [NC]
RewriteRule ^$ http://mi_web_movil.com [R,L]
A mi tambien me sale esta advertencia:
Warning: Cannot modify header information – headers already sent by (output started at /home/wanda/www/www/index.php:7) in /home/wanda/www/www/index.php on line 46
sabes aque se debe??
Gracias por la ayuda.
Hola, estas usando algún session_start ??
Hola por que a mi no me funciona y me aparece esto en la web?
Lo podre con mis link y con el archivo original y me sucede lo mismo....
Alguna ayuda?
Gracias!
Gerardo
mmm parece que no se esta ejecutando bien tu documento, probablemente no lo este leyendo como un documento de php, podrías darme más información
tienes mal esta parte:
< ?php
debe ser sin espacio:
De lujooooooo… Es exacto lo que buscava, muchas gracias
a mi no me funciona, me da este resultado cuando creo un index solo para el codigo…
Warning: Cannot modify header information – headers already sent by (output started at /home/automoto/public_html/index.php:2) in /home/automoto/public_html/index.php on line 36
el codigo es este:
gracias, habia buscado la solucion.. pero esta es la mas practica y clara que he visto, que sertero, Mil graicas
Super!!!! Gracias Hermano!!! Q buen dato!!!!
excelente aporte felicitaciones
Muchas gracias voy a probarlo =)
excelente…
me funcionó correctamente
Hola amigo muchas gracias por la ayuda. Sin embargo, estoy tratando de hacer las pruebas desde mi blackberry javelyn (sw v5.0) y sigue direccionandome a la página web normal. Crees que haya que agregar algo mas?
Gracias. Saludos!
Tienes razon, existen por ahi algunas filtraciones, no te preocupes ya casi tengo lista una nueva version con mucho menos cógigo y que permitirá agregar o quitar dispositivos para que sean redireccionados facilmente
Ya quedo la version 2.0 XD mas compacta y facil de personalizar!!!
Hola Julio.
Gracias por esta referencia. Con algunas adaptaciones esta trabajando a la perfección.
Saludos desde Venezuela
Me funciona a las mil maravillas. Muchas gracias!!
bajando!
Sam
muchas gracias Hermano…
sam