2008-12-22 12 views
13

Estoy escribiendo un sitio web con PHP. Como cualquier persona en la red necesita acceder para acceder a Internet, tengo que crear una versión móvil. ¿Cómo puedo verificar si es un dispositivo móvil? No quiero tener una declaración de cambio con 50 dispositivos al final, ya que no solo quiero dar soporte al iPhone.¿Cómo puedo determinar si se trata de un dispositivo móvil con PHP?

¿Existe alguna clase de PHP que pueda usar?

Respuesta

15

Debe verificar varios encabezados que envía el cliente, como USER_AGENT y HTTP_ACCEPT. Consulte this article para obtener un script de detección completo para usuarios móviles en PHP.

+0

Si están usando su propia detección, entonces está rota. Me dijo que mi Opera 10 en Mac OS X es un navegador móvil. – Kornel

+0

No depuré su secuencia de comandos si eso es lo que estás preguntando :) Por supuesto, siempre debes probar todo lo que lees en Internet, pero el principio está ahí –

+1

Este artículo tiene cuatro años y echa de menos una gran cantidad de novedades dispositivos. – bestattendance

4

Otra cosa a tener en cuenta: muchos sitios ofrecerán una URL diferente para dispositivos móviles. Ver http://m.facebook.com como ejemplo. Con la creciente capacidad de los dispositivos en estos días, esto les da a sus usuarios una opción. Si están en un dispositivo que realmente puede manejar bien un sitio web completo (usando el zoom y otras cosas), entonces probablemente se sentirán bastante molestos al verse obligados a un diseño en particular.

+1

Como dijo que es un portal para que las personas inicien sesión No puedo esperar que conozcan la dirección del servidor de inicio de sesión .. – Thomaschaaf

0

Si desea adaptar el contenido a cualquier dispositivo en particular, p. para cambiar el tamaño de las imágenes para que sean del ancho del dispositivo, también puede usar DeviceAtlas. Según el agente de utilización del dispositivo solicitante, le indicará el tamaño de la pantalla, junto con los formatos de imagen compatibles, los tipos de marcado admitidos, el tamaño máximo de página, etc.

0

La mayoría de los sitios web móviles usan el user_agent exclusivamente. Se mantiene una base de datos de código abierto de las capacidades del dispositivo al http://wurfl.sourceforge.net/ Usando wurlf, y basado en el user_agent, puede identificar la pantalla física y el ancho, la longitud y muchos más parámetros de píxeles de la pantalla, y tomar una decisión de representación.

0

¿Qué es un dispositivo móvil? ¿CPU más débil? ¿Ancho de banda inferior? En realidad, tiene una pantalla cuya resolución está por debajo de 320x240 y la profundidad de color está por debajo de 24.

También debe usar Javascript. Este enlace le dará una idea: http://www.w3schools.com/js/tryit.asp?filename=tryjs_browsermonitor

Y, esta liga te va a enseñar lo que es lo que: http://www.w3schools.com/htmldom/dom_obj_screen.asp

+0

Votación abajo para w3schools, alentar el uso de MDN o otros recursos de javascript. – runspired

2

dispositivos Tradicionalmente móviles se han detectado mediante la comparación de la cabecera HTTP User-Agent con una lista de pozo cadenas de UA móviles conocidas. En cambio, un enfoque novedoso intenta detectar la presencia de un sistema operativo de escritorio; cualquier elemento que no sea un SO de escritorio debe ser móvil.

Esto da como resultado menos falsos positivos.

He escrito un post con código de ejemplo en Python aquí: http://notnotmobile.appspot.com

Aquí hay un fragmento:

import re 

# Some mobile browsers which look like desktop browsers. 
RE_MOBILE = { 
    "iphone" : re.compile("ip(hone|od)", re.I), 
    "winmo" : re.compile("windows\s+ce", re.I)} 

RE_DESKTOP = { 
    "linux" : re.compile(r"linux", re.I), 
    "windows" : re.compile(r"windows", re.I), 
    "mac" : re.compile(r"os\s+(X|9)", re.I), 
    "solaris" : re.compile(r"solaris", re.I), 
    "bsd" : re.compile(r"bsd", re.I)} 

# Bots that don't contain desktop OSs. 
RE_BOT = re.compile(r"(spider|crawl|slurp|bot)") 


def is_desktop(user_agent): 
    # Anything that looks like a phone isn't a desktop. 
    for regex in RE_PHONE.values(): 
    if regex.search(user_agent) is not None: 
     return False 

    # Anything that looks like a desktop probably is. 
    for regex in RE_DESKTOP.values(): 
    if regex.search(user_agent) is not None: 
     return True 

    # Bots get the desktop view. 
    if RE_BOT.search(user_agent) is not None: 
    return True 

    # Anything else is probably a phone! 
    return False 

def get_user_agent(request): 
    # Some browsers put the User-Agent in a HTTP-X header 
    if 'HTTP_X_OPERAMINI_PHONE_UA' in request.headers: 
    return request.headers['HTTP_X_OPERAMINI_PHONE_UA'] 
    elif: 
    # Skyfire/Bolt/other mobile browsers 
    ... 
    else: 
    return request.headers.get('HTTP_USER_AGENT', '') 

def view(request): 
    user_agent = get_user_agent(request) 
    if is_desktop(user_agent): 
    return desktop_response() 
    else: 
    return mobile_response() 
5

usted debe buscar en Tera-WURFL, es un PHP & software basado en MySQL paquete que detecta dispositivos móviles y sus capacidades. Aquí está el código Tera-WURFL en que se usan para detectar si el dispositivo de visitar es móvil:

<?php 
require_once("TeraWurfl.php"); 
$wurflObj = new TeraWurfl(); 
$wurflObj->GetDeviceCapabilitiesFromAgent(); 
if($wurflObj->capabilities['product_info']['is_wireless_device']){ 
    // this is a mobile device 
}else{ 
    // this is a desktop device 
} 
?>  
3

Para la parte de redirección, solía

$arr = explode('.', $_SERVER['SERVER_NAME'], 2); 
$sub=$arr[0]; 
$need_redirect=false; 
if (!isset($_SERVER['HTTP_REFERER'])){ 
    $need_redirect=true; 
}else{ 
    $domain = parse_url($_SERVER['HTTP_REFERER']); 
    $host = $domain['host']; 
    if (!preg_match('/romajidesu\.com/', $host)){ 
     $need_redirect=true;   
    }  
} 
if ($need_redirect && ($sub!='m') && is_mobile()){ 
    $old_url=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
    $new_url='http://'.str_replace('www.', 'm.', $old_url); 
    header("Location:".$new_url);die(); 
} 

Para más detalle de mi implmentation, por favor leer mi blog en http://haibuihoang.blogspot.com/2012/11/how-to-redirect-mobile-users-to-your.html

0

No es la mejor opción para decidir el dispositivo móvil mediante la verificación de agente de usuario. Debería unirse a la verificación de ancho de dispositivo de JavaScript con la comprobación de agente de usuario de PHP. Pero hasta cierto punto, la verificación del agente de usuario es aceptable.

Yo uso esto. No es tan bueno como WURFL, pero resuelve mis problemas fácilmente:

function is_mobile_device() { 

    $agent=$_SERVER['HTTP_USER_AGENT']; 

    if(strpos($agent,"Android") !== FALSE 
     || strpos($agent,"IOS") !== FALSE 
     || strpos($agent,"iPhone") !== FALSE 
     || strpos($agent,"iPad") !== FALSE 
     || strpos($agent,"iPod") !== FALSE 
     || strpos($agent,"Symbian") !== FALSE 
     || strpos($agent,"BlackBerry") !== FALSE 
     || strpos($agent,"Opera Mini") !== FALSE 
    ) { 
     return TRUE; 
    } 
    return FALSE; 

} 
Cuestiones relacionadas