PHP Facile!
existe aussi en version
SQL et XML

6.Le langage PHP

6.10.Les variables prédéfinies

6.10.1.Introduction

Lorsqu'un script PHP est exécuté suite à une requête HTTP, le "moteur" PHP rempli un certain nombre de variables avec des valeurs récupérées des données fournies dans la requête HTTP (la demande client, le type de navigateur), des valeurs liées au serveur web, voire d'autres informations (comme les variables d'environnement du serveur).
  • Si le script PHP est exécuté en tant que simple script (i.e. sans serveur web) certaines de ces variables (celles qui sont disponibles) sont également renseignées.
Ces variables sont en fait plus exactement une variable $_SERVER[] (depuis PHP 4.1) de type tableau contenant autant d'entrées qu'il y a de valeurs récupérées. Ces variables, dites pré-définies, vous pouvez les utiliser n'importe où dans vos scripts PHP.

6.10.2.Les principales variables

6.10.2.1.Données du serveur (Apache)

$_SERVER["DOCUMENT_ROOT"] L'espace où sont stockées les pages webs
$_SERVER["PHP_SELF"] Le chemin du script par rapport à DOCUMENT_ROOT

6.10.2.2.Données du navigateur (et requête HTTP)

$_SERVER["REMOTE_ADDR"] L'IP du visiteur
$_SERVER["HTTP_USER_AGENT"] L'identifiant du navigateur
$_SERVER["HTTP_REFERER"] L'url du site d'où vient le visiteur de la page (pas toujours renseigné ou exact)
$_SERVER["HTTP_ACCEPT_LANGUAGE"] Les langues préférées du visiteur
  • Pour avoir un aperçu plus complet des informations qu'il est ainsi possible de récupérer, jetez un oeil au resultat retourné par la fonction phpinfo().
  • Pour PHP<4.1 remplacez par exemple $_SERVER["REMOTE_ADDR"] par $REMOTE_ADDR.

6.10.3.Détection de la langue du visiteur (Accept-Language)

Le navigateur émêt un en-tete Accept-Language (disponible via la variable $_SERVER["HTTP_ACCEPT_LANGUAGE"]) qui contient la liste des langues que l'utilisateur a indiqué comme étant les langues qu'il accepte, classés par ordre de préférence. Fouillez un petit peu dans les options de votre navigateur vous trouverez où cela se configure.
Il suffit alors de prendre la première langue trouvée (ou eventuellement, de rechercher parmi ces langues la première pour laquelle il y a une traduction de votre site).
<?php
    echo "Vous acceptez les langues suivantes: ".
         htmlEntities($_SERVER["HTTP_ACCEPT_LANGUAGE"])."<br/>";
    $langs=explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
    echo "mais votre langue principale est: $langs[0]";
?>
Qui donne dans votre cas:
Vous acceptez les langues suivantes: en-us,en-gb,en;q=0.7,*;q=0.3
mais votre langue principale est: en-us

6.10.4.User-Agent

6.10.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":
CCBot/2.0 (http://commoncrawl.org/faq/)
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)
  • 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.

6.10.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 (ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Internet explorer";
} else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Netscape";
} else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Opera";
} else {
    echo "inconnu";
}
?>
Qui donne dans votre cas:
Vous utilisez un navigateur de type: inconnu

6.10.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 (ereg("Linux", $_SERVER["HTTP_USER_AGENT"])) {
    echo "linux (un excellent choix)";
} else if (ereg("WinNT", $_SERVER["HTTP_USER_AGENT"])||ereg("Windows NT", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows NT";
} else if (ereg("Windows 98", $_SERVER["HTTP_USER_AGENT"])||ereg("Win98", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows 98";
} else if (ereg("Windows 95", $_SERVER["HTTP_USER_AGENT"])||ereg("Win95", $_SERVER["HTTP_USER_AGENT"])) {
    echo "Windows 95";
} else if (ereg("Macintosh", $_SERVER["HTTP_USER_AGENT"])||ereg("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 donne dans votre cas:
Vous utilisez un systeme d'exploitation de type: Pas Glop, je ne connais pas cet OS