Détecter les Smartphones en PHP

I. Présentation

Les smartphones sont de plus en plus nombreux et la grandeur des écrans qu'ils embarquent permet d'encourager les utilisateurs à les utiliser pour naviguer sur internet. De ce fait, de nombreux sites web se doivent d'adapter leur design en fonction de la taille de l'écran sur lequel le site s'affiche. Pour cela, on peut utiliser notamment l'attribut "media" en HTML5 pour appliquer certaines propriétés CSS uniquement aux écrans correspondant à certaines résolutions. Toutefois, si l'on inclut ces paramètres dans une feuille CSS à part dédiée à l'affichage sur "petits" écrans, il est inutile de la charger lorsque l'utilisateur se situe sur un PC portable ou de bureau.

En utilisant le PHP, nous allons voir comment charger cette feuille CSS - dédiée aux smartphones - uniquement lorsqu'on se trouve sur Smartphones.

II. L'utilité du User Agent

Dans les requêtes HTTP effectuées depuis un client web, une chaîne user agent est intégrée et elle contient des informations sur votre navigateur ainsi que votre système d'exploitation. Par exemple, lorsque j'accède à un site web depuis mon PC j'envoie les informations suivantes pour la chaîne user agent :

Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0

On peut donc voir que j'utilise le navigateur Mozilla Firefox en version 22.0, Windows NT 6.2 qui correspond en fait à Windows 8 ainsi que WOW64 qui signifie que l'application 32 bits fonctionne sur un OS 64 bits (Windows-on-Windows-64-bit).

Pour voir les informations que vous envoyez dans la chaîne User Agent, consultez ce site : UserAgentString

III. Les User Agent des Smartphones

Bien entendu, sur un smartphone il ne sera pas indiqué "Windows NT 6.2" concernant le système d'exploitation puisqu'il s'agira probablement d'Android, de Symbian, de Windows Phone, d'iOS ou encore de l'OS Blackberry. Voici à quoi peut ressembler la valeur pour l'OS dans une chaîne User Agent sur smartphone :

  • Android : Android 4.1.2
  • Symbian : SymbianOS ou SymbOS
  • Windows Phone : Windows Phone 8.0
  • iOS : iPhone ou iPad ou iPod
  • Blackberry : BlackBerry

Pour les autres OS qui peuvent être plus rarement utilisés, vous pourrez sûrement trouver des informations les concernant au sein de cette liste : UserAgentList

IV. Le code PHP

En PHP, il existe une variable prédéfinie nommée $_SERVER qui permet d'obtenir des informations sur le serveur web mais également de récupérer quelques informations concernant le client qui se connecte, comme son adresse IP et sa chaîne User Agent. Le principe va donc être le suivant : Récupérer la valeur de la chaîne User Agent envoyée par le client, si cette chaîne contient "android", "blackberry", etc... alors c'est qu'il s'agit d'un Smartphone donc on chargera le fichier CSS dédié à l'affichage sur ces appareils, sinon il ne sera pas chargé.

// Chargement du fichier CSS s'il s'agit d'un user agent smartphones
$ua = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('/iphone/i',$ua) || preg_match('/android/i',$ua) || preg_match('/blackberry/i',$ua) || preg_match('/symb/i',$ua) || preg_match('/ipad/i',$ua) || preg_match('/ipod/i',$ua) || preg_match('/phone/i',$ua) )
{
echo "<LINK rel="stylesheet" type="text/css" href="smartphones.css">"
}

L'expression rationnelle "preg_match" permet de recherche une chaîne de caractères dans une chaîne de caractères de base, autrement dit dans notre cas, on prend la chaîne complète de User Agent et on recherche la présence de "android", "symb", "iphone", etc... Pour voir s'il s'agit d'un Smartphone ou non. Si c'est le cas, on ajoute la ligne permettant de charger la feuille CSS "smartphones.css".

 

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian BURNEL

Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

Nombre de posts de cet auteur : 5556.Voir tous les posts

6 thoughts on “Détecter les Smartphones en PHP

  • Oui, mais avc le UserAgent, on ne peut pas différencier s’il s’agit d’une tablette ou d’un smartphone.
    La seule solution pour ça est de rajouter une détection de la résolution d’écran ?

    Répondre
    • Bonjour,

      Effectivement détecter la résolution peut être une solution, il faudrait regarder en détail les chaînes User Agent mais il me semble que certaines portent la mention « Mobile » quand il s’agit d’un smartphone. Lorsqu’il s’agit d’une tablette cette mention n’apparaîtrait pas.

      Répondre
      • Pour les appareils récents (android 4.0+, WP8.x, iOs 6+), à mon sens il est plus efficace d’utiliser les techniques liées au « responsive design », et n’utiliser la détection de l’user-agent que pour des cas très spécifiques. Le travail de conception est certes un peu plus compliqué, mais vu la puissance des appareils même « bas de gamme », pas la peine de multiplier plus que ça les codes spécifiques.

        Répondre
  • Moi aussi j’utilise cette technique tres utile sauf que sur le user agent de la tablette ya linux et android compris dedans …

    Répondre
  • Une petite erreur de syntaxe c’est glissée dans le code proposé :
    Si l’on met du code HTML à l’intérieur d’un code PHP, il faut alterner le doubles et simples quotes.

    Le code qui fonctionne est donc : echo  »;

    Répondre
  • Ça fait longtemps que je cherche cette astuce, Merci pour ton aide je pense que ça va l’aider dans le projet avenir!

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.