HOWTO · PHP

Cómo detectar dispositivos móviles en PHP

Aprende a clasificar las solicitudes móviles en PHP con Mobile Detect o un patrón de user-agent.

En esta página

En PHP, puedes clasificar una solicitud como móvil con la biblioteca mobiledetect, instalada mediante Composer, o buscar coincidencias en HTTP_USER_AGENT de $_SERVER con preg_match(). Ambos métodos infieren una categoría de dispositivo a partir de los encabezados de la solicitud; ninguno puede demostrar qué dispositivo físico la envió.

Usa la clase mobiledetect para detectar dispositivos móviles en PHP

Instala la biblioteca mobiledetect en tu proyecto con Composer mediante composer require mobiledetect/mobiledetectlib. Después, carga vendor/autoload.php de Composer y crea una instancia de Mobile_Detect. La biblioteca utiliza información de la solicitud, como las cadenas de agente de usuario y otros encabezados, para clasificar a los clientes.

Para comprobar si se trata de un dispositivo móvil, llama a $detect->isMobile(). El método devuelve un valor booleano que puedes usar en una condición if/else para elegir el resultado móvil o no móvil. La clase también ofrece isTablet() si necesitas tratar las tabletas por separado. Decide cómo afectarán los resultados de las tabletas al diseño o a las funciones de tu aplicación antes de usar la clasificación general de dispositivos móviles.

Esta clasificación refleja la solicitud que recibe PHP. El modo de diseño adaptable de un navegador puede enviar un agente de usuario distinto al cambiar el dispositivo emulado, pero eso no permite verificar el comportamiento en todos los teléfonos o tabletas físicos. Los valores del agente de usuario se pueden modificar, así que la detección del cliente no debe utilizarse como comprobación de seguridad o identidad.

Usa HTTP_USER_AGENT y la función preg_match() para detectar dispositivos móviles en PHP

Para comprobarlo sin dependencias, lee HTTP_USER_AGENT de la superglobal $_SERVER y compáralo con un conjunto breve de términos relacionados con dispositivos móviles. Es posible que la clave no exista, así que proporciona una cadena alternativa antes de llamar a preg_match(). Si quieres probar el patrón fuera de una solicitud web, usa por separado un valor de agente de usuario de ejemplo; durante una solicitud real, PHP recibe el valor del encabezado enviado.

<?php
$_SERVER['HTTP_USER_AGENT'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$pattern = '/(android|iphone|ipod|ipad|mobile|tablet)/i';
$isMobile = preg_match($pattern, $userAgent) === 1;

echo $isMobile ? 'Mobile device detected' : 'Mobile device not detected';

preg_match() devuelve 1 si encuentra una coincidencia, 0 si no la encuentra y false si no puede evaluar el patrón. La comparación con === 1 hace que la condición solo se cumpla ante una coincidencia positiva. Si una solicitud real no incluye el encabezado, el valor alternativo será una cadena vacía y este patrón seguirá la rama de dispositivo no móvil.

Interpreta el resultado como una clasificación aproximada. Las cadenas de agente de usuario pueden faltar, modificarse o cambiar, y un patrón breve que se mantiene manualmente puede no reconocer clientes nuevos o poco comunes. Una lista más larga tampoco garantiza una cobertura completa. El debate de Stack Overflow sobre cadenas de agente de usuario para dispositivos móviles es una referencia mantenida por la comunidad; revisa sus sugerencias con cuidado antes de adaptarlas a tu aplicación.