saber - mobile_detect.php ejemplos
¿Cómo puedo determinar si es un dispositivo móvil con PHP? (11)
¿El agente de usuario en la solicitud le daría suficiente información para tomar una decisión?
Hay una buena lista de agentes de usuario aquí .
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.
¿Hay alguna clase PHP que pueda usar?
Debe verificar varios encabezados que envía el cliente, como USER_AGENT y HTTP_ACCEPT. Consulte este artículo para ver un script de detección completo para usuarios móviles en PHP.
Otra cosa a considerar: muchos sitios ofrecerán una URL diferente para dispositivos móviles. Ver http://m.facebook.com como un 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.
Si desea adaptar el contenido a cualquier dispositivo en particular, por ejemplo, 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 admitidos, los tipos de marcado admitidos, el tamaño máximo de página, etc.
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 en 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, y tomar una decisión de representación .
Tradicionalmente se han detectado dispositivos móviles comparando el encabezado HTTP User-Agent con una lista de cadenas de UA móviles bien 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 una publicación 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()
Debería mirar Tera-WURFL , es un paquete de software basado en PHP y MySQL que detecta dispositivos móviles y sus capacidades. Aquí está el código Tera-WURFL que usaría para detectar si el dispositivo visitante 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
}
?>
¿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 debes usar Javascript. Este enlace le dará una idea: http://www.w3schools.com/js/tryit.asp?filename=tryjs_browsermonitor
Y este enlace le enseñará qué es qué: http://www.w3schools.com/htmldom/dom_obj_screen.asp
Para la parte de redirección, utilicé
$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 obtener más detalles de mi implementación, lea mi blog en http://haibuihoang.blogspot.com/2012/11/how-to-redirect-mobile-users-to-your.html.
No es la mejor opción para decidir un dispositivo móvil al verificar el 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;
}
Para detección basada en User-Agent, use la base de datos WURFL . Al menos es completo y se actualiza continuamente.
Si segmenta solo teléfonos de gama alta (ish), es posible que no necesite detectarlos en absoluto, solo inserte las hojas de estilo móviles apropiadas .