HOWTO · PHP
Comment détecter les appareils mobiles en PHP
Apprenez à classer les requêtes mobiles en PHP avec Mobile Detect ou un motif user-agent.
Sur cette page
En PHP, vous pouvez classer une requête comme provenant d’un appareil mobile avec la bibliothèque mobiledetect installée par Composer, ou en comparant HTTP_USER_AGENT dans $_SERVER à l’aide de preg_match(). Ces deux méthodes déduisent une catégorie d’appareil à partir des en-têtes de la requête ; aucune ne peut prouver quel appareil physique a envoyé la requête.
Utilisez la classe mobiledetect pour détecter les appareils mobiles en PHP
Installez la bibliothèque mobiledetect dans votre projet avec Composer à l’aide de la commande composer require mobiledetect/mobiledetectlib. Chargez ensuite vendor/autoload.php de Composer et créez une instance de Mobile_Detect. La bibliothèque s’appuie sur des informations de la requête, notamment les chaînes user-agent et d’autres en-têtes, pour classer les clients.
Pour effectuer une vérification simple, appelez $detect->isMobile(). Cette méthode renvoie un booléen que vous pouvez utiliser dans une branche if/else pour choisir le résultat destiné aux appareils mobiles ou aux autres appareils. La classe fournit aussi isTablet() si votre application doit traiter les tablettes séparément ; déterminez comment leur résultat doit influer sur votre mise en page ou votre fonctionnalité avant d’utiliser la classification plus générale des appareils mobiles.
Cette classification dépend de la requête reçue par PHP. Le mode de conception responsive d’un navigateur peut envoyer un user-agent différent lorsque vous changez l’appareil émulé, mais cela ne permet pas de vérifier le comportement sur chaque téléphone ou tablette physique. Les valeurs du user-agent peuvent être modifiées ; la détection du client ne doit donc pas servir à vérifier une identité ou à assurer la sécurité.
Utilisez HTTP_USER_AGENT et la fonction preg_match() pour détecter les appareils mobiles en PHP
Pour effectuer une vérification sans dépendance, lisez HTTP_USER_AGENT dans la superglobale $_SERVER et recherchez-y quelques termes associés aux appareils mobiles. La clé peut être absente : fournissez donc une chaîne de remplacement avant d’appeler preg_match(). Cet exemple vérifie une valeur user-agent d’iPhone donnée à titre d’exemple ; lors d’une requête Web, PHP reçoit la valeur de l’en-tête de la requête.
<?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() renvoie 1 en cas de correspondance, 0 en l’absence de correspondance et false si le motif ne peut pas être évalué. La comparaison avec === 1 fait dépendre la branche uniquement d’une correspondance positive. Si une requête réelle ne contient pas cet en-tête, la valeur de remplacement est une chaîne vide et ce motif mène à la branche correspondant aux appareils non mobiles.
Considérez ce résultat comme une classification approximative. Les chaînes user-agent peuvent être absentes, modifiées ou changer ; un motif court entretenu manuellement peut aussi ne pas reconnaître des clients récents ou peu courants. Une liste plus longue ne garantit pas une couverture complète. La discussion Stack Overflow sur les chaînes user-agent mobiles est une référence entretenue par la communauté : examinez soigneusement les suggestions avant de les adapter à votre application.