SlideShare ist ein Scribd-Unternehmen logo
1 von 5
Downloaden Sie, um offline zu lesen
Exercice 2 : compteur de visites (I)
On souhaite comptabilisé le nombre de chargement d’une page (la page
d’accueil par exemple). On va procéder de la façon suivante : le compteur
numérique sera stocké dans un fichier, à la première ligne. Ce fichier
contiendra seulement un nombre, celui des visites.

Phase 1 : incrémenter la valeur dans le fichier
Ce fichier va s’appeler compteur.cpt.
Principe de l’algorithme : si le fichier n’existe pas encore (file_exists), alors on
le crée et on l’ouvre en écriture (fopen w) et on initialise le compteur à zéro en
écrivant la chaîne ‘0’ en première ligne (fputs) et on le referme (fclose).
Ensuite, ouverture du fichier en lecture plus écriture (fopen r+), lecture du
nombre (fgets), incrémentation d’une unité du nombre (++), positionnement du
pointeur courant du fichier en première ligne (fseek 0) et réécriture du nombre
(fputs) puis fermeture (fclose).
Cet algorithme (écrit dans la diapo suivante) est écrit directement dans le code
source de la page d’accueil.




Le CyberZoïde Qui Frétille       http://cyberzoide.developpez.com               122/154
Exercice 2 : compteur de visites (II)
Algorithme :
$fichier = "compteur.cpt";                  // affectation du nom de fichier
if( ! file_exists($fichier)) {              // test d’existence
           // initialisation du fichier si n’existe pas encore
           $fp = fopen($fichier,"w");// ouverture en écriture
           fputs($fp,"0");                  // écriture
           fclose($fp);                     // fermeture
}
$fp = fopen($fichier,"r+");                 // ouverture
$hits = fgets($fp,10);                      // lecture
$hits++;                                    // incrémentation
fseek($fp,0);                               // positionnement
fputs($fp,$hits);                           // écriture
fclose($fp);                                // lecture




Le CyberZoïde Qui Frétille          http://cyberzoide.developpez.com           123/154
Exercice 2 : compteur de visites (III)
Phase 2 : généralisation aux autres
pages                                           <?
                                                function Mon_Compteur($page) {
Comme les internautes peuvent atterrir
sur des pages internes à votre site sans          $fichier = $page.".cpt";
passer par l’accueil, il peut être                if(!file_exists($fichier)) {
intéressant de pouvoir comptabilité des                    $fp = fopen($fichier,"w");
visites des autres pages. Cela                             fputs($fp,"0");
permettra aussi de comparer la                             fclose($fp);
popularité relative de vos différentes            }
rubriques.                                        $fp = fopen($fichier,"r+");
Créons donc une fonction que l’on                 $hits = fgets($fp,10);
placera dans un fichier à part par                $hits++;
exemple compteur.php et que l’on                  fseek($fp,0);
appellera par inclusion comme ceci :
                                                  fputs($fp,$hits);
<?php include("compteur.php");                    fclose($fp);
Mon_Compteur("ma_page") ?>                      }
Remplacez "ma_page" par un                      ?>
identifiant unique pour chaque page.


Le CyberZoïde Qui Frétille     http://cyberzoide.developpez.com                   124/154
Exercice 2 : compteur de visites (IV)
Phase 3 : protection contre la redondance
Comme un visiteur peut charger plusieurs fois la même page au cours d’une
même visite, ce mode de décompte n’est pas assez précis et va surestimé le
nombre réel de visiteurs. Il faut donc garder en mémoire le fait qu’un visiteur
est déjà passé par la page et incrémenter le compteur seulement si ce n’est
pas le cas. On va donc créer une variable de session : un tableau contenant la
liste des pages visitées.
Principe du nouvel algorithme : on teste l’existence de la variable de session
$PAGES_LIST, si elle n’existe pas on la crée, on y ajoute la page en cours et
on appelle la fonction Mon_Compteur. Si elle existe, on teste la présence de
la page en cours dans ce tableau, si elle n’y est pas alors on l’y met et on
appelle Mon_Compteur.
L’appel est légèrement différent :
<?php
$page = "ma_page";                    // définition du nom de la page
include("compteur.php");              // chargement de l’algorithme
?>


Le CyberZoïde Qui Frétille     http://cyberzoide.developpez.com             125/154
Exercice 2 : compteur de visites (V)
Voici le code à rajouter dans le fichier compteur.php :
session_start();                // démarrage de la session
if( ! isset($PAGES_LIST)) { // test de l’existence de la variable de session
           $PAGES_LIST = array($page);         // création de la variable
           session_register($PAGES_LIST); // ajout de la page en cours
           Mon_compteur($page);                // incrémentation du compteur
} else {
           if( ! in_array($page, $PAGES_LIST)) {         // test de redondance
                     $PAGES_LIST[ ] = $page;             /* ajout dans la variable
de session pour éviter la redondance */
                     Mon_compteur($page); // incrémentation du compteur
           }
}




Le CyberZoïde Qui Frétille       http://cyberzoide.developpez.com              126/154

Weitere ähnliche Inhalte

Was ist angesagt?

Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...
Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...
Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...Edureka!
 
Python Django tutorial | Getting Started With Django | Web Development With D...
Python Django tutorial | Getting Started With Django | Web Development With D...Python Django tutorial | Getting Started With Django | Web Development With D...
Python Django tutorial | Getting Started With Django | Web Development With D...Edureka!
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)Debby Ummul
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つYuichi Hasegawa
 
20210317 AWS Black Belt Online Seminar Amazon MQ
20210317 AWS Black Belt Online Seminar Amazon MQ 20210317 AWS Black Belt Online Seminar Amazon MQ
20210317 AWS Black Belt Online Seminar Amazon MQ Amazon Web Services Japan
 
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話wind06106
 
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...Edureka!
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIPapa Cheikh Cisse
 
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2 Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2 Alphorm
 
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介HOYA株式会社様 SAP on AWS マイグレーション事例の紹介
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介Masaru Hiroki
 
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報Amazon Web Services Japan
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteTatsuo Kudo
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Web Services Japan
 
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTik
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTikKonfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTik
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTikAdhie Lesmana
 
laporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotiklaporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotikalesandro alansyah
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話Daisuke Hiraoka
 
Présentation de Microsoft Azure
Présentation de Microsoft AzurePrésentation de Microsoft Azure
Présentation de Microsoft AzureChristophe Peugnet
 

Was ist angesagt? (20)

Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...
Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...
Python Sequence | Python Lists | Python Sets & Dictionary | Python Strings | ...
 
Python Django tutorial | Getting Started With Django | Web Development With D...
Python Django tutorial | Getting Started With Django | Web Development With D...Python Django tutorial | Getting Started With Django | Web Development With D...
Python Django tutorial | Getting Started With Django | Web Development With D...
 
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)
Modul Praktikum Pemrograman Berorientasi Objek (Chap.11)
 
Les applications-web-avec-javafx
Les applications-web-avec-javafxLes applications-web-avec-javafx
Les applications-web-avec-javafx
 
20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ20170525 jsug バッチは地味だが役に立つ
20170525 jsug バッチは地味だが役に立つ
 
20210317 AWS Black Belt Online Seminar Amazon MQ
20210317 AWS Black Belt Online Seminar Amazon MQ 20210317 AWS Black Belt Online Seminar Amazon MQ
20210317 AWS Black Belt Online Seminar Amazon MQ
 
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
 
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...
Python Tutorial For Beginners | Python Crash Course - Python Programming Lang...
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMIMise en place d'un système de messagerie sécurisée pour une PME/PMI
Mise en place d'un système de messagerie sécurisée pour une PME/PMI
 
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2 Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2
Alphorm.com Formation WSUS (Windows Server Update Services) 3.0 SP2
 
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介HOYA株式会社様 SAP on AWS マイグレーション事例の紹介
HOYA株式会社様 SAP on AWS マイグレーション事例の紹介
 
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
20211203 AWS Black Belt Online Seminar AWS re:Invent 2021アップデート速報
 
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authleteいまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
いまどきの OAuth / OpenID Connect (OIDC) 一挙おさらい (2020 年 2 月) #authlete
 
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon PinpointAmazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
Amazon Pinpoint を中心としたカスタマーエンゲージメントの全体像 / Customer Engagement On Amazon Pinpoint
 
Vpn
VpnVpn
Vpn
 
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTik
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTikKonfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTik
Konfigurasi VLAN di Cloud Router Switch ( CRS ) MikroTik
 
laporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotiklaporan praktikum menggunakan mikrotik
laporan praktikum menggunakan mikrotik
 
IBM Log Analysis with LogDNAを評価した話
 IBM Log Analysis with LogDNAを評価した話 IBM Log Analysis with LogDNAを評価した話
IBM Log Analysis with LogDNAを評価した話
 
Présentation de Microsoft Azure
Présentation de Microsoft AzurePrésentation de Microsoft Azure
Présentation de Microsoft Azure
 

Andere mochten auch

3 examen et corrige francais 2013 1 am t1
3 examen et corrige francais 2013 1 am t13 examen et corrige francais 2013 1 am t1
3 examen et corrige francais 2013 1 am t1Ahmed Mesellem
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zinebZineb ELGARRAI
 
Introduction aux technologies du Web (1)
Introduction aux technologies du Web (1)Introduction aux technologies du Web (1)
Introduction aux technologies du Web (1)Saïd Radhouani
 
Test de français
Test de françaisTest de français
Test de françaisfrancaisweb
 
Test de français international
Test de français internationalTest de français international
Test de français internationalMar Crespo
 
Exercice sur les classes en Java
Exercice sur les classes en JavaExercice sur les classes en Java
Exercice sur les classes en JavaWiki Info Systeme
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPPascal MARTIN
 
S1 eco i - microéconomie i exercices td 2011-2012
S1   eco i - microéconomie i exercices td 2011-2012S1   eco i - microéconomie i exercices td 2011-2012
S1 eco i - microéconomie i exercices td 2011-2012Abdeslam ELMOUDEN
 

Andere mochten auch (15)

لنتعلم إسلامنا
لنتعلم إسلامنالنتعلم إسلامنا
لنتعلم إسلامنا
 
Dubois quentin
Dubois quentinDubois quentin
Dubois quentin
 
technologie web
technologie webtechnologie web
technologie web
 
3 examen et corrige francais 2013 1 am t1
3 examen et corrige francais 2013 1 am t13 examen et corrige francais 2013 1 am t1
3 examen et corrige francais 2013 1 am t1
 
UKO-JAVA1001-slides
UKO-JAVA1001-slidesUKO-JAVA1001-slides
UKO-JAVA1001-slides
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 
Introduction aux technologies du Web (1)
Introduction aux technologies du Web (1)Introduction aux technologies du Web (1)
Introduction aux technologies du Web (1)
 
Cours primitives
Cours primitivesCours primitives
Cours primitives
 
Test de français
Test de françaisTest de français
Test de français
 
Test de français international
Test de français internationalTest de français international
Test de français international
 
Exercice sur les classes en Java
Exercice sur les classes en JavaExercice sur les classes en Java
Exercice sur les classes en Java
 
Serie de TD 3 POO
Serie de TD 3 POOSerie de TD 3 POO
Serie de TD 3 POO
 
Cours php
Cours phpCours php
Cours php
 
Bonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHPBonnes pratiques de developpement en PHP
Bonnes pratiques de developpement en PHP
 
S1 eco i - microéconomie i exercices td 2011-2012
S1   eco i - microéconomie i exercices td 2011-2012S1   eco i - microéconomie i exercices td 2011-2012
S1 eco i - microéconomie i exercices td 2011-2012
 

Ähnlich wie Compteur de visites

Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressIZZA Samir
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afupJulien Vinber
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique🏁 Pierre-Henry Soria 💡
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfYasushiTsubakik
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP EL JAOUARI Ahmed
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Engineor
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryneuros
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4🏁 Pierre-Henry Soria 💡
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academySoufiane SAHMI
 

Ähnlich wie Compteur de visites (20)

Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
 
Php 7.4 2020-01-28 - afup
Php 7.4   2020-01-28 - afupPhp 7.4   2020-01-28 - afup
Php 7.4 2020-01-28 - afup
 
Php1
Php1Php1
Php1
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Chap2
Chap2Chap2
Chap2
 
Cours php
Cours php Cours php
Cours php
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
Php cours
Php coursPhp cours
Php cours
 
Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !Open close principle, on a dit étendre, pas extends !
Open close principle, on a dit étendre, pas extends !
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
 
Programmation web cours php -- sahmi academy
Programmation web   cours php -- sahmi academyProgrammation web   cours php -- sahmi academy
Programmation web cours php -- sahmi academy
 

Compteur de visites

  • 1. Exercice 2 : compteur de visites (I) On souhaite comptabilisé le nombre de chargement d’une page (la page d’accueil par exemple). On va procéder de la façon suivante : le compteur numérique sera stocké dans un fichier, à la première ligne. Ce fichier contiendra seulement un nombre, celui des visites. Phase 1 : incrémenter la valeur dans le fichier Ce fichier va s’appeler compteur.cpt. Principe de l’algorithme : si le fichier n’existe pas encore (file_exists), alors on le crée et on l’ouvre en écriture (fopen w) et on initialise le compteur à zéro en écrivant la chaîne ‘0’ en première ligne (fputs) et on le referme (fclose). Ensuite, ouverture du fichier en lecture plus écriture (fopen r+), lecture du nombre (fgets), incrémentation d’une unité du nombre (++), positionnement du pointeur courant du fichier en première ligne (fseek 0) et réécriture du nombre (fputs) puis fermeture (fclose). Cet algorithme (écrit dans la diapo suivante) est écrit directement dans le code source de la page d’accueil. Le CyberZoïde Qui Frétille http://cyberzoide.developpez.com 122/154
  • 2. Exercice 2 : compteur de visites (II) Algorithme : $fichier = "compteur.cpt"; // affectation du nom de fichier if( ! file_exists($fichier)) { // test d’existence // initialisation du fichier si n’existe pas encore $fp = fopen($fichier,"w");// ouverture en écriture fputs($fp,"0"); // écriture fclose($fp); // fermeture } $fp = fopen($fichier,"r+"); // ouverture $hits = fgets($fp,10); // lecture $hits++; // incrémentation fseek($fp,0); // positionnement fputs($fp,$hits); // écriture fclose($fp); // lecture Le CyberZoïde Qui Frétille http://cyberzoide.developpez.com 123/154
  • 3. Exercice 2 : compteur de visites (III) Phase 2 : généralisation aux autres pages <? function Mon_Compteur($page) { Comme les internautes peuvent atterrir sur des pages internes à votre site sans $fichier = $page.".cpt"; passer par l’accueil, il peut être if(!file_exists($fichier)) { intéressant de pouvoir comptabilité des $fp = fopen($fichier,"w"); visites des autres pages. Cela fputs($fp,"0"); permettra aussi de comparer la fclose($fp); popularité relative de vos différentes } rubriques. $fp = fopen($fichier,"r+"); Créons donc une fonction que l’on $hits = fgets($fp,10); placera dans un fichier à part par $hits++; exemple compteur.php et que l’on fseek($fp,0); appellera par inclusion comme ceci : fputs($fp,$hits); <?php include("compteur.php"); fclose($fp); Mon_Compteur("ma_page") ?> } Remplacez "ma_page" par un ?> identifiant unique pour chaque page. Le CyberZoïde Qui Frétille http://cyberzoide.developpez.com 124/154
  • 4. Exercice 2 : compteur de visites (IV) Phase 3 : protection contre la redondance Comme un visiteur peut charger plusieurs fois la même page au cours d’une même visite, ce mode de décompte n’est pas assez précis et va surestimé le nombre réel de visiteurs. Il faut donc garder en mémoire le fait qu’un visiteur est déjà passé par la page et incrémenter le compteur seulement si ce n’est pas le cas. On va donc créer une variable de session : un tableau contenant la liste des pages visitées. Principe du nouvel algorithme : on teste l’existence de la variable de session $PAGES_LIST, si elle n’existe pas on la crée, on y ajoute la page en cours et on appelle la fonction Mon_Compteur. Si elle existe, on teste la présence de la page en cours dans ce tableau, si elle n’y est pas alors on l’y met et on appelle Mon_Compteur. L’appel est légèrement différent : <?php $page = "ma_page"; // définition du nom de la page include("compteur.php"); // chargement de l’algorithme ?> Le CyberZoïde Qui Frétille http://cyberzoide.developpez.com 125/154
  • 5. Exercice 2 : compteur de visites (V) Voici le code à rajouter dans le fichier compteur.php : session_start(); // démarrage de la session if( ! isset($PAGES_LIST)) { // test de l’existence de la variable de session $PAGES_LIST = array($page); // création de la variable session_register($PAGES_LIST); // ajout de la page en cours Mon_compteur($page); // incrémentation du compteur } else { if( ! in_array($page, $PAGES_LIST)) { // test de redondance $PAGES_LIST[ ] = $page; /* ajout dans la variable de session pour éviter la redondance */ Mon_compteur($page); // incrémentation du compteur } } Le CyberZoïde Qui Frétille http://cyberzoide.developpez.com 126/154