20.Exemples de scripts PHP

20.4.Mesure d'audience

20.4.1.Introduction

Il existe de nombreux moyens d'avoir des mesures d'audience de nos sites web. Cela peut se faire par analyse des fichiers de traces (logs) du serveur web (lorsque celui-ci est rendu accessible par l'hébergeur), via l'intermédiaire d'un site de mesure d'audience ou par ses propres moyens.
Ce chapitre à deux objectifs:
  • voir comment le faire par ses propres moyens (ce qui n'est pas forcement la meilleure solution)
  • comprendre le principe de fonctionnement d'un site de mesure d'audience

20.4.2.Principe de base

Comme nous l'avons vu, avec les variables prédéfinies[c'est quoi?], il est possible de glaner quelques informations sur "celui" qui, en visitant une page de votre site, exécute un script PHP (sans vraiment en avoir conscience).
Ceci concerne notamment:
  • l'adresse IP du visiteur (via $_SERVER["REMOTE_ADDR"]) que l'on peut considérer comme propre à une personne pour une période donnée. Il est donc possible de savoir combien de personnes sont venues consulter votre site dans la journée.
  • l'identifiant du navigateur (via $_SERVER["HTTP_USER_AGENT"]) qui vous permettra de connaître quels sont les navigateurs les plus utilisés et ainsi vous assurer que votre site est bien compatible avec les navigateurs de vos "clients".
  • le "reférant" (via $_SERVER["HTTP_REFERER"]) qui vous permettra de quel site vient votre visiteur (et par conséquent connaître les pages proposant un lien vers votre site).
  • la page consultée (via $_SERVER["REQUEST_URI"]).
Il suffit alors d'insérer dans chaque script PHP (i.e. faire un include) le code permettant de stocker ces informations en base de données.
  • On ne peut se contenter d'inclure le script dans la page d'accueil puisque le visiteur peut accéder au site par n'importe quel page et qui plus est il peut être interessant de connaître quelles pages ont été consultées.
  • On considère généralement qu'une même IP apparaissant plusieurs fois avec des périodes d'inactivités supérieures à 20 ou 30 min correspond à différents visiteurs (et non un visiteur unique).

20.4.3.Stockage en base de données

Pour stocker en base de données ces informations, il suffit au préalable de créer une table[comment?] avec la requête suivante
CREATE TABLE mesureaudience (ipvisiteur VARCHAR(15),
                             hostvisiteur VARCHAR(64), 
                             url VARCHAR(256),
                             useragent VARCHAR(256),
                             referrer VARCHAR(256),
                             datevisite DATETIME,
                             UNIQUE(ipvisiteur,datevisite))
et d'inclure dans chaque page du site le bout de code suivant (idéalement par un simple include_once("mesureaudience_inc.php")). Notez que, si votre site suit la structure décrite dans le chapitre "Mise en Page/Frames", il suffit de mettre l'instruction include() dans le fichier contenant l'en-tête du site pour qu'il soit appelé de n'importe quelle page du site.
<?php
    $BD_serveur     = "localhost";
    $BD_utilisateur = "root";
    $BD_motDePasse  = "";
    $BD_base        = "mabase";

    if (@mysql_connect($BD_serveur, $BD_utilisateur, $BD_motDePasse)) {
        if (@mysql_select_db($BD_base)) {
            $sql = "INSERT INTO mesureaudience (ipvisiteur, hostvisiteur, url, useragent, referrer, datevisite) ".
                 " VALUES('".$_SERVER["REMOTE_ADDR"]."',".
                     "'".addSlashes(getHostByAddr($_SERVER["REMOTE_ADDR"]))."',".
                     "'".addSlashes($_SERVER["REQUEST_URI"])."',".
                     "'".addSlashes($_SERVER["HTTP_USER_AGENT"])."',".
                     "'".addSlashes($_SERVER["HTTP_REFERER"])."',".
                     "NOW())";
            @mysql_query($sql);
        }
        @mysql_close();
    }

?>
rem
  • La fonction getHostByAddr() permet de convertir une adresse IP (au format XXX.XXX.XXX.XXX) en un nom de machine (plus lisible). En revanche, elle peut être relativement longue (donc affecter les performances de votre site).
  • Chaque fonction appelée dans le code inclus est précédé d'un @ ceci afin de masquer un éventuel message d'erreur (inutile de poluer la mise en page du site si nous n'avons pu stocker l'information. Il ne s'agit que de statistiques).
  • Vous avez maintenant des données brutes qu'il convient d'analyser. Vous devrez différencier les visiteurs humains (qui vous intéressent), des robots des moteurs de recherche ("spiders"), des aspirateurs de site. Pour cela, vous pourrez vous appuyer sur le User-agent (d'où l'interêt de le stocker).
  • Telle qu'elle est définie, la table n'autorise qu'un seul enregistrement lié à une adresse IP à un instant donné (à la seconde près) mais il peut arriver que plusieurs pages soient consultées au même instant (notamment dans le cas du passage d'un robot ou d'un aspirateur de site).
Le script qui vous est proposé répond, en partie au moins, au besoin exprimé mais...
  • Il ne permet pas de compter les visites de pages HTML pures (on ne collecte que les visites des scripts PHP)
  • Il n'explique pas comment fonctionne un site de mesure d'audience puisque l'exemple donné nécessite la copie d'un script PHP sur le serveur or les sites de mesure d'audience ne fournissent qu'une image ou un bout de code javascript.