7.PHP pour le web

7.2.Les variables prédéfinies

7.2.4.Détection du navigateur (User-Agent)

7.2.4.1.Présentation

La variable $_SERVER["HTTP_USER_AGENT"] peut être mise à profit pour aider à la détection du navigateur et du système d'exploitation utilisé par votre visiteur.
Par exemple:
Votre navigateur a pour "signature":
Mozilla/5.0 (compatible; SemrushBot/3~bl; +http://www.semrush.com/bot.html)
comme l'indique le code suivant:
<?php
echo "Votre navigateur a pour \"signature\":<br />".
     htmlEntities($_SERVER["HTTP_USER_AGENT"]);
?>
D'autres navigateurs peuvent retourner des chaînes du genre:
  • Mozilla/4.7 [en] (X11; I; Linux 2.2.5-15 i586)
  • Mozilla/4.6 [fr] (WinNT; I)
  • Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
  • Opera/5.02 (Windows 98; U) [en]
  • Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)
  • Mozilla/4.5 [fr] (Macintosh; I; PPC)
rem
  • Notez que cette information peut être facilement usurpée. N'importe qui peut utiliser un navigateur et faire croire qu'il en utilise un autre (ce qui toutefois n'a pas grand interêt).
Malheureusement, le format de cette chaîne de caractères n'est pas normalisé, pour l'exploiter, il faut donc s'adapter.

7.2.4.2.Détection du navigateur utilisé

De l'échantillon précédent, on peut "deviner" que le navigateur est:
  • Internet Explorer, si le User-Agent contient la chaîne "MSIE" (suivi du numéro de version d'I.E)
  • Netscape, si le User-Agent contient la chaîne "Mozilla/" (suivi du numéro de version) mais ne contient pas "MSIE"
  • Opera, si le User-Agent contient la chaîne "Opera/" (suivi du numéro de version)
On peut donc se risquer à déterminer le type de navigateur utilisé avec un code du genre:
<?php
echo 'Vous utilisez un navigateur de type: ';
if (preg_match('/MSIE/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Internet explorer";
} else if (preg_match('/^Mozilla\//', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Netscape";
} else if (preg_match('/^Opera\//', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Opera";
} else {
    echo "inconnu";
}
?>
Qui pourrait retourner:
Vous utilisez un navigateur de type: Netscape

7.2.4.3.Détection du système d'exploitation

La chaîne User-Agent contient généralement cette information mais pour l'extraire le plus simple est encore de prendre la liste des systèmes d'exploitation possibles et voir s'il est dans la chaîne User-Agent (puisqu'il est difficile, à priori, de savoir à quel endroit de la chaîne se trouve cette information). C'est ce qui est fait dans le script suivant:
<?php
echo 'Vous utilisez un systeme d\'exploitation de type: ';
if (preg_match('/Linux/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "linux (un excellent choix)";
} else if (preg_match('/WinNT/', $_SERVER["HTTP_USER_AGENT"])||preg_match('/Windows NT/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows NT";
} else if (preg_match('/Windows 98/', $_SERVER["HTTP_USER_AGENT"])||preg_match('/Win98/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows 98";
} else if (preg_match('/Windows 95/', $_SERVER["HTTP_USER_AGENT"])||preg_match('/Win95/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows 95";
} else if (preg_match('/Macintosh/', $_SERVER["HTTP_USER_AGENT"])||preg_match('/Mac_PowerPC/', $_SERVER["HTTP_USER_AGENT"])) {
    echo "un OS pour Mac (avec un peu de chance il s'agit de Mac OS X)";
} else {
    echo "Pas Glop, je ne connais pas cet OS";
}
?>
Qui pourrait retourner:
Vous utilisez un systeme d'exploitation de type: Pas Glop, je ne connais pas cet OS