Il s'agit de compter les visites effectuées à un site. Ici on présente 3 solutions écrites en PHP. Il faudra alors inclure un peu de code externe dans chaque page du site (par l'appel à un fichier inclus par la directive require ou include), et par conséquent si nécessaire renommer chacune de ces pages avec une extension .php (comme on le sait ceci est nécessaire pour que le code soit exécuté par l'interpréteur PHP associé au serveur WEB)
La première façon, la plus simple, fait appel à un simple fichier de données, dans lequel on écrit le nombre de visites, la contrainte étant pour le script PHP de bénéficier du droit d'écriture, ce qui est rarement accordé !
Les 2 suivantes nécessitent l'accès en lecture/écriture à une table d'une base de données (souvent Mysql), l'attribution de cet espace base de données étant accordé en même temps que l'espace PHP par les fournisseurs d'accès.
La seconde solution se contente de compter globalement tous les accès aux pages du site, tandis que la troisième ambitionne de compter les accès page par page, en incluant dans chaque page le même script externe, par souci de simplicité.
Utilisation d'un fichier de données
Si le site est hébergé sur un serveur web hébergé dans l'établissement, sur lequel le webmestre possède le précieux droit d'écriture, le plus simple est de conserver le nombre d'accès dans un fichier.
Voici un exemple de code adapté à un système Linux (donc à légèrement adapter si on utilise Easyphp):
- le fichier est placé dans /tmp
- s'il est créé par le script, il devrait porter les bonnes permissions pour être mis à jour aux prochaines exécutions
Pour marquer une page quelconque du site, mais nécessairement .php, il suffit alors d'inclure ce fichier dans cette page à l'endroit où l'on veut afficher le compteur. Si on ne veut pas l'afficher , mettre en commentaire la ligne d'affichage.
Voici une page d'essai, qui suppose que le fichier inclus se trouve dans le même répertoire (sinon, faire précéder d'un chemin relatif)
Si on veut différencier les accès à quelques pages du site, on peut créer plusieurs fichiers, chacun étant spécifique d'une page. Si les pages sont nombreuses, il est sans doute préférable de recourir à une table Mysql (voir solution 2).
Utilisation d'une table MYSQL
Dans le cas plus général où le site est hébergé par le serveur WEB académique, il n'est pas possible d'utiliser des fichiers de données dans les pages PHP. L'alternative consiste à créer une table spécifique dans sa base de données (celle-ci est appelée compteur ci-dessous).
Préalablement, il faudra (par ex. à l'aide de phpmyadmin)
- créer la table avec un seul champ de type entier (ici appelé nombre)
- y créer un seul enregistrement (initialisé à 0)
Voici le fichier de commande
Voici le script simple qui permet de compter globalement les accès à toutes les pages :
Le fichier de connexion inclus dans compteur.php :
Chaque page (nécessairement .php) dont on désire comptabiliser les accès doit être "marquée" par l'inclusion du script compteur.php. Voici une page d'essai, qui suppose que le fichier inclus se trouve dans le même répertoire (sinon, le faire précéder d'un chemin relatif)
Compter les accès aux pages individuelles
Le script précédent ne permet pas de compter les accès page par page .. Voici une solution générale plus satisfaisante :
La première façon, la plus simple, fait appel à un simple fichier de données, dans lequel on écrit le nombre de visites, la contrainte étant pour le script PHP de bénéficier du droit d'écriture, ce qui est rarement accordé !
Les 2 suivantes nécessitent l'accès en lecture/écriture à une table d'une base de données (souvent Mysql), l'attribution de cet espace base de données étant accordé en même temps que l'espace PHP par les fournisseurs d'accès.
La seconde solution se contente de compter globalement tous les accès aux pages du site, tandis que la troisième ambitionne de compter les accès page par page, en incluant dans chaque page le même script externe, par souci de simplicité.
Si le site est hébergé sur un serveur web hébergé dans l'établissement, sur lequel le webmestre possède le précieux droit d'écriture, le plus simple est de conserver le nombre d'accès dans un fichier.
Voici un exemple de code adapté à un système Linux (donc à légèrement adapter si on utilise Easyphp):
- le fichier est placé dans /tmp
- s'il est créé par le script, il devrait porter les bonnes permissions pour être mis à jour aux prochaines exécutions
------ fichier compteur.php -------
<?
$fich="/tmp/compteur.txt";
if (! file_exists($fich)) {
# si le fichier compteur n'existe pas, le créer vide
touch($fich);
echo "Le fichier $fich vient d'être créé !<p>";
}
if ($f = fopen( $fich, "r+") ) {
$taille=filesize($fich);
$nombre=fread($f, $taille);
$nombre++;
echo "<h4>".$nombre."ème accès</h4>";
rewind($f);
fputs( $f, $nombre, strlen($nombre));
fclose($f);
}
else
echo "Problème : accès au fichier compteur.txt impossible ..";
?> |
Voici une page d'essai, qui suppose que le fichier inclus se trouve dans le même répertoire (sinon, faire précéder d'un chemin relatif)
------- page essai-compteur.php --------
<h2>Page d'essai du compteur</h2>
<?
require("compteur.php");
?> |
Dans le cas plus général où le site est hébergé par le serveur WEB académique, il n'est pas possible d'utiliser des fichiers de données dans les pages PHP. L'alternative consiste à créer une table spécifique dans sa base de données (celle-ci est appelée compteur ci-dessous).
Préalablement, il faudra (par ex. à l'aide de phpmyadmin)
- créer la table avec un seul champ de type entier (ici appelé nombre)
- y créer un seul enregistrement (initialisé à 0)
Voici le fichier de commande
# Structure de la table `compteur` CREATE TABLE `compteur` ( `nombre` smallint(6) NOT NULL default '0', ) TYPE=MyISAM; # Contenu de la table `compteur` INSERT INTO `compteur` VALUES (0); |
--------- fichier compteur.php ------------
<?
// inclure un fichier de connexion usuel
require ("params.inc.php");
$connexion= mysql_connect($hote,$login,$mdp);
mysql_select_db($bd, $connexion);
$req="select nombre from compteur";
$resultat=mysql_query($req,$connexion);
list($nombre)= mysql_fetch_row($resultat);
$nombre++;
echo "<h4>".$nombre."ème accès</h4>";
$req="UPDATE compteur SET nombre='$nombre'";
$ok=mysql_query($req,$connexion);
?> |
--------- fichier params.inc.php ---------- <? $hote="...."; $login="...."; $mdp="...."; $bd="...."; ?> |
------- page essai-compteur.php --------
<h2>Page d'essai du compteur</h2>
<? require("compteur.php"); ?> |
Le script précédent ne permet pas de compter les accès page par page .. Voici une solution générale plus satisfaisante :
- Créer une table comprenant les champs :
- page : chaîne contenant le nom de chaque page - nombre : le compteur associé à la page - éventuellement, un champ identificateur auto-increment - et 2 champs temporels date et heure, pour noter l'instant du dernier accès
# Structure de la table `compteur` CREATE TABLE compteur ( id smallint(6) NOT NULL auto_increment, page varchar(255) NOT NULL default '', nombre smallint(6) NOT NULL default '0', date date NOT NULL default '0000-00-00', heure time NOT NULL default '00:00:00', PRIMARY KEY (id) ) TYPE=MyISAM;
- Code du script compteur.php :
------- fichier compteur.php -------- <? /* inclure le fichier de paramètres * et se connecter à la base de données */ require ("params.inc.php"); $connexion= mysql_connect($hote,$login,$mdp); mysql_select_db($bd, $connexion); // récupère le nom complet (précédé du chemin) du fichier de la page en cours d'exécution $page=$PHP_SELF; // exécute une requête pour chercher ce nom dans la table $req="select * from compteur where page='$page'"; $resultat=mysql_query($req,$connexion); $nb= mysql_num_rows($resultat); // si le nom du fichier se trouve déjà dans la table, if ($nb == 1) { $ligne= mysql_fetch_array($resultat); /* alors on récupère la valeur du champ compteur, on l'incrémente et on met à jour le champ compteur ainsi que la date et l'heure actuelle */ $nombre = ++ $ligne[nombre]; $req_maj="UPDATE compteur SET nombre='$nombre', date=now(), heure=curtime() WHERE page='$page' "; mysql_query($req_maj,$connexion); // echo "page $page : $nombre ème accès le $ligne[date] à $ligne[heure]"; } elseif ($nb == 0) { /* sinon on insère un nouvel enregistrement avec ce nom, * son compteur initialisé à 1 * ainsi que la date et l'heure actuelle */ $req_ins="INSERT INTO compteur (page,nombre,date,heure) VALUES ('$page',1,now(),curtime() )"; mysql_query($req_ins,$connexion); // echo "page $page : 1er accès"; } ?> - Pour marquer chaque page du site dont on désire mesurer et connaître l'audience, il suffit de recopier en haut du source de ces pages la simple ligne suivante (ne pas oublier toutefois de les renommer avec l'extension .php) :
<? require("compteur.php"); ?>Créer un compteur avec PHP



Aucun commentaire:
Enregistrer un commentaire