Ultimos posts del blog de JCS

Actualizaciones cada 720 minutos.

miércoles, 10 de febrero de 2010

Detectar dispositivos moviles y redireccionar PHP


Publicado en:

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 o la extensión que tenía).

En el archivo index.php introducimos el siguiente código, aún no lo pruebo con todos los dispositivos, pero con esto debería detectar y redireccionar a cualquier dispositivo móvil, incluso los más nuevos como el iphone, ipod, el motorola droid, los blackberry storm y otros:

<?

    $useragent=$_SERVER['HTTP_USER_AGENT'];
    $mobile_browser = '0';

   if(preg_match('/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile|o2|opera mini|palm( os)?|plucker|pocket|pre\/|psp|smartphone|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce; (iemobile|ppc)|xiino|iIEMobile|Windows CE|NetFront|PlayStation|PLAYSTATION|like Mac OS X|MIDP|UP\.Browser|Symbian|Nintendo|Android/',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))){
        $mobile_browser++;
    }

    if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
        $mobile_browser++;
    }

    if(preg_match("/Android/i",$_SERVER["HTTP_ACCEPT"])){
        $mobile_browser++;
    }

    if((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml')>0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
        $mobile_browser++;
    }

    $mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'],0,4));
    $mobile_agents = array(
        'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
        'blaz','brew','cell','cldc','cmd-','dang','deviceBB','doco','eric',
        'hipt','inno','ipaq','ipod','iphon','java','jigs','kddi','keji','leno',
        'lg-c','lg-d','lg-g','lge-','maui','maxo','midp','mits','mmef','mobi',
        'mot-','moto','mwbp','nec-','newt','noki','oper','palm','pana','pant',
        'phil','play','port','prox','qwap','sage','sams','sany','sch-','sec-',
        'send','seri','sgh-','shar','sie-','siem','smal','smar','sony','sph-',
        'symb','t-mo','teli','tim-','tosh','tsm-','upg1','upsi','vk-v','voda',
        'wap-','wapa','wapi','wapp','wapr','webc','webOS','winw','winw','xda',
        'xda-');

    if(in_array($mobile_ua,$mobile_agents)) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['ALL_HTTP']),'operamini')>0) {
        $mobile_browser++;
    }

    if(isset($_SERVER["HTTP_X_SKYFIRE_PHONE"])){
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['ALL_HTTP']),'iphone')>0) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['ALL_HTTP']),'ipod')>0) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),' ppc;')>0) {
        $mobile_browser++;
    }

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows ce')>0) {
        $mobile_browser++;
    }
    else if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows')>0) {
        $mobile_browser=0;
    }

    if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'iemobile')>0) {
        $mobile_browser++;
    }

    $dm_usergent = array(
       'PIE4' => 'compatible; MSIE 4.01; Windows CE; PPC; 240x320',
       'PIE4_Smartphone' => 'compatible; MSIE 4.01; Windows CE; Smartphone;',
       'PIE6' => 'compatible; MSIE 6.0; Windows CE;',
       'Minimo' => 'Minimo',
       'OperaMini' => 'Opera Mini',
       'AvantGo' => 'AvantGo',
       'Plucker' => 'Plucker',
       'NetFront' => 'NetFront',
       'SonyEricsson' => 'SonyEricsson',
       'Nokia' => 'Nokia',
       'Motorola' => 'mot-',
       'BlackBerry' => 'BlackBerry',
       'WindowsMobile' => 'Windows CE',
       'PPC' => 'PPC',
       'PDA' => 'PDA',
       'Smartphone' => 'Smartphone',
       'Palm' => 'Palm'
    );

    function obtenerNavegador($useragents, $useragent){
       foreach($useragents as $nav=>$ua){
          if(strstr($useragent, $ua)!=false){
             return $nav;
          }
       }
       return 'Desconocido';
    }

    $navegador= obtenerNavegador($dm_usergent,$_SERVER['HTTP_USER_AGENT']);
    if($navegador!='Desconocido'){
       header('Location:Aquí va la URL de tu web normal');
    }
    else{
        header('Location:Aquí va la URL de tu web normal');
    }

    if($mobile_browser>0) {
        header('Location:Aquí va la URL de tu web móvil');
    }
    else{
        header('Location:Aquí va la URL de tu web normal');
    }

?>


Esta entrada ha sido actualizada, ver aquí

Comparte el artículo con todos

Algo parecido:

25 Comentarios a Detectar dispositivos moviles y redireccionar PHP

Anónimo
15 de febrero de 2010, 12:09

No lo puedo copiar!!

15 de febrero de 2010, 12:26

tienes razón, acabo de agregar el archivo descargable, de hecho voy a colocar los archivos originales con el código para que se puedan descargar en este tipo de post XD

Anónimo
15 de febrero de 2010, 12:51

muchas gracias Hermano...

sam

Anónimo
15 de febrero de 2010, 12:53

bajando!

Sam

18 de marzo de 2010, 17:46

No funcionA

5 de abril de 2010, 11:31

Me funciona a las mil maravillas. Muchas gracias!!

Anónimo
22 de abril de 2010, 10:21

tremendo codigo, solo modificas add tu web y la movil y fuas arranca que pritty gracias.

Anónimo
20 de mayo de 2010, 13:19

Excelente...

Anónimo
28 de junio de 2010, 12:27

Em..... lo veo innecesariamente complejo... qué tal si comprobáis la dimensión de su pantalla con JS? algo así:

<,script type="text/javascript",>
if(screen.width < 100){
location.replace('wap.misitio.com')
}
<,/script ,>

(quitar comas, claro)

Anónimo
11 de agosto de 2010, 9:53

Hola, Muchas Gracias por los script de validación estan manejables.
Aca te envío una validación que no tomaste en cuenta y es si el navegador es Opera para Macintosh me dice que es Móvil por que sus primeras 4 letras son 'oper' y no consigue la palabra 'windows' en la siguiente validación
"else if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows') > 0) "; le agregue la de Macintosh allí mismo.

29 de noviembre de 2010, 12:49

Hey necesito ayuda! No corre! :S Me sale el siguiente error: Parse error: syntax error, unexpected ';' in /home/thefish/public_html/index.php on line 19.. Podrian postear un ejemplo?

Anónimo
2 de diciembre de 2010, 13:12

Saludos, No me Funciona en IE8

Anónimo
2 de diciembre de 2010, 17:38

de donde puedo bajar el archivo?

rafa
10 de diciembre de 2010, 12:16

holaaa de donde lo puedo descagar!?

Anónimo
16 de diciembre de 2010, 13:44

hola tengo un problema, utileice el codigo y me tira este error

Parse error: syntax error, unexpected ';' in /home/vamos/public_html/indexm.php on line 16

sabes como podria solucionarlo?

gracias

Anónimo
2 de marzo de 2011, 19:46

no puedo ver la pgina en el iphone 4 no sabes porque ,,, en los demas telefonos funciona perfectamente

Anónimo
16 de junio de 2011, 13:56

kreeeesss k no se puede copiar wey no seas pendejo engañalos a los que no saben. consiganse el firebug y inspeccionen el elemento del contenedor del codigo y ya listo ahi lo copian. ok saludos.

Anónimo
1 de julio de 2011, 1:22

sino lo pueden copiar.... solo seleccionen y arrastra en un block de notas o word pad y listo... si funcio al 100... thanks....

Anónimo
21 de julio de 2011, 21:04

el autor del codigo ha dicho que no se reprodusca el codigo en otras paginas, para que no sea código desactualizado el que usen, el autor está actualizando cada vez que sale un movil nuevo con diferentes caracteristicas. asi que lo que hace el que posteo este codigo hace bien en que no se pueda copiar, pero debió poner la url del autor donde pueden encontrar el codigo, ahí les va https://trac.agron.iastate.edu/trac/IEM/browser/iemwebsite/include/mobile_device_detect.php?rev=6362

Anónimo
29 de noviembre de 2011, 13:08

Hola alguien me puede sacar de una duda , aunque para vosotros sea una tontería.

Se paga aparte la versión movil de una web al servicio de hospedaje? Vamos que si te cobran por tu subir la versión movil.

28 de diciembre de 2011, 11:49

una consulta, y si por ejemplo quiero diferenciar entre dispositivos moviles? osea tengo un sitio para blackberry, uno para ipad y uno para PC. MUCHAS GRACIAS!!

Anónimo
8 de abril de 2012, 13:39

Gracias funciona de huevos...

15 de julio de 2012, 22:35

Recomiendo esta librería que se actualiza frecuentemente:

http://code.google.com/p/php-mobile-detect/

Anónimo
11 de enero de 2013, 12:54

parece bueno

22 de enero de 2013, 10:22

Tal vez la pregunta sea un poco tonta, se tiene que colocar el codigo al que ira en la version movil? O la version de escritorio?
Gracias.

Publicar un comentario