<< Retour au sommaire

 

 

Les fichiers de données

 

 

 

Le sommaire :

  1. Introduction.
  2. L’ouverture et la fermeture.
  3. L’écriture.
  4. La lecture.
  5. Le mini compteur de visites.
  6. Amélioration du mini compteur de visites.

 

 

Introduction

 

Un fichier de données est un fichier texte dans lequel nous pouvons enregistrer des données de façon linéaire.

 

En PHP, nous pouvons créer, lire et modifier des fichiers de données.

 

 

L’ouverture et la fermeture

 

Avant de lire ou de modifier un fichier de données, il faut l’ouvrir et la fonction PHP est « fopen ».

 

La syntaxe :

 

$canal = fopen (NomDuFichierTexte,Mode);

 

$canal : est une variable de type entier qui reçoit une valeur correspondant au canal du fichier ouvert. Cette valeur sera utilisée pour lire et écrire dans le fichier, mais aussi pour le fermer.

 

NomDuFichierTexte : est une chaîne de caractères, c’est le nom du fichier à ouvrir, ne pas oublier son extension.

Si le nom du fichier n’est pas représenté par une variable, pensez à encadrer la chaîne par des guillemets…

 

Mode : est le mode d’ouverture du fichier et peut prendre les valeurs « R », « W » et « A ».

« R » pour lecture…

« W » pour écriture en écrasant les données présentent dans le fichier…

« a » pour écriture en ajoutant les données à venir à la fin du fichier…

Les caractères « r », « w » et « a » peuvent être suivi du signe + « plus » ainsi, le fichier sera ouvert en lecture et en écriture.

 

Voici le tableau récapitulatif des modes d’ouverture :

 

Modes

Descriptions du mode

R

Ouverture en lecture seulement

W

Ouverture en écriture seulement

(Écrasera les données existantes)

(le fichier est créé s’il n’existe pas)

A

Ouverture en écriture seulement

(Les nouvelles données seront ajoutées à la fin du fichier)

(Le fichier est créé s’il n’existe pas)

R+

Ouverture en lecture et écriture

W+

Ouverture en lecture et écriture

(Écrasera les données existantes)

(le fichier est créé s’il n’existe pas)

A+

Ouverture en lecture et écriture

(Les nouvelles données seront ajoutées à la fin du fichier)

(Le fichier est créé s’il n’existe pas)

 

Remarque :

Si vous désirez que le fichier soit ouvert en mode « binaire », il vous suffit de rajouter [b] après le caractère d’ouverture.

Attention, le « b » est placé entre crochets !

 

Exemple :

$canal = fopen ("noms.txt","a"); >

-         ici le fichier de données, “Noms.txt” a été ouvert en mode ajout.

 

Ensuite pour fermer le fichier :

fclose ($canal);

 

Remarque :

Dans l’ouverture fichier de données, une adresse URL peut être utilisée comme chemin :

$canal = fopen http://www.Monsite.fr/("noms.txt","a"); >

 

 


L’écriture

 

Après avoir ouvert le fichier de données dans le mode de votre choix, vous devez écrire dans celui-ci par le biais de la fonction « fputs », voici la syntaxe :

 

$NbCar = fputs ($canal,texte);

 

$NbCar : est une variable de type entier qui reçoit en retour de la fonction « fputs » le nombre de caractères écrits.

 

$canal : est la variable qui contient le canal permettant d’identifier le fichier de données.

 

Texte est une chaîne de caractères à écrire, soit représentée par une variable de type String ou par un texte placé entre guillemets.

 

Voici un exemple :

 

<?php

$canal = fopen ("noms.txt","a");

$NbCar = fputs ($canal,"bonjour tout le monde");

fclose ($canal); ?>

 

Remarque :

-         nous avons la possibilité d’utiliser une autre fonction carrément identique à « fputs », c’est « fwrite ».

 

Voici un exemple :

 

Description :

Dans le fichier « index.php », se trouve un formulaire permettant de demander à l’utilisateur de saisir son nom.

Le contrôle s’appellera « Nom ».

Une fois le bouton du formulaire validé, le fichier script « enregistrement.php » est exécuté.

Ce fichier script va procéder à l’enregistrement du nom dans le fichier « Noms.txt ».

Ensuite, le fichier « fin.php » est exécuté, il affiche un message de succès !

 

Le code du fichier « index.php » :

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>

<title>Bienvenue</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<h1>Création d'un fichier de données</h1>

<p>

<form action="enregistrement.php" method="post">

<label for="nom">

Quel est votre nom ? </label>

<input type="text" id="nom" name="Nom" size="50" />

<br />

<input type="submit" value="Valider" />

</p></form>

</body>

</html>

 

Le code du fichier script « enregistrement.php » :

 

<?php

// récupération du formulaire

extract ($_POST,EXTR_OVERWRITE);

// Ouverture du fichier en mode ajout

$canal = fopen ("noms.txt","a");

// écriture de la variable

$NbCar = fwrite ($canal,$Nom);

// Fermeture du fichier

fclose ($canal);

// Affichage de la page de fin d'opération

header ("location:fin.php"); ?>

 

Le code du fichier « fin.php » :

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>

<title>Opération terminée</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<h1>Bonjour</h1>

<p>J'ai le plaisir de vous annoncer que vous avez réussi !</p>

</body>

</html>

 

 


La lecture

 

La fonction permettant de lire un fichier de données est « fgets ».

La syntaxe :

 

  $Ligne = fgets ($canal,NBCaractères);

 

$Ligne : est une variable qui reçoit la ligne lue. Si aucune ligne n’est lue, $Ligne contiendra la valeur 0.

 

$canal : est l’entier qui identifie le fichier de données.

 

$NBCaractères : est le nombre de caractères à lire considéré comme étant la longueur d’une ligne…

 

Toujours en conservant notre exemple dans lequel nous avons des prénoms et noms d’enregistrés dans le fichier de données « Noms.txt », voici le code qui permet de lire et d’afficher le contenu du fichier :

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>

<title> Affichage d'un fichier</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>

<body>

<h1>Contenu du fichier Noms.txt</h1>

<p>

<?php

// ouverture du fichier Noms.txt en lecture seule

$canal = fopen("Noms.txt","r");

// création d'une boucle pour lire la totalité du fichier

while (!feof ($canal)) {

  // lecture de la ligne courante

  $Ligne = fgets ($canal,50);

  // Affichage de la ligne

  echo "$Ligne <br />"; } ?>

</p>

</body>

</html>

 

Ici, dans le code de l’exemple, nous avons utilisé la fonction « feof », qui retourne vrai si la fin du fichier est atteinte.

Alors dans la boucle « while », il suffit de placer cette fonction comme condition de traitement pour que la totalité du fichier soit lue.

Le paramètre de la fonction « feof » est le canal du fichier de données…

 

Remarque :

Comme l’expression du « while » doit retourner « vrai » pour que l’exécution de la boucle continue, et que « feof » retourne vrai uniquement quand la fin du fichier est atteinte, c’est la raison pour laquelle nous avons inversé le résultat de la fonction en plaçant un « ! » « point d’exclamation » devant la fonction « feof ». Ainsi, tant que la fin du fichier n’est pas atteinte, l’expression est vraie !

 


Un mini compteur de visites

 

Par le biais des fonctions PHP spécialisées dans la gestion de fichiers de données, nous allons créer un mini compteur hyper simple !

 

Toutefois, il faut impérativement que le dossier qui héberge le compteur soit paramétré pour être accessible en mode « écriture ».

 

Pour télécharger l’exemple ?

Télécharger le compteur de visites >>

 

Voici un exemple.

La page d’accueil s’intitule « LaPage.php ».

Dans l’entête de cette page d’accueil, nous allons réaliser l’inclusion du fichier de fonctions externes par l’intermédiaire de la fonction « include ».

Ce fichier de fonctions se nomme « fonctions.inc »…

Il contient une fonction intitulée « AfficherCompteur » et dont le rôle se devine !

 

Dans cette fonction « AfficherCompteur », voici les opérations qui sont réalisées :

Ouvrir le fichier compteur.txt en lecture.

Extraire le nombre de visiteurs en l’affectant à une variable locale.

Refermer le fichier.

Incrémenter la variable locale qui contient désormais la nouvelle donnée.

Ouvrir le fichier compteur.txt, mais cette fois, en écriture et en effaçant son contenu.

Écrire le contenu de la variable locale dans le fichier.

Refermer le fichier.

Afficher le compteur de visites dans la page d’accueil.

 

Dans cet exemple, 3 fichiers sont donc utilisés.

LaPage.php pour la page d’accueil,

Fonctions.inc pour le fichier des fonctions externes,

Et compteur.txt pour enregistrer le nombre de visiteurs.

Concernant ce fichier texte, il vous suffit de le créer avec le bloc notes et d’écrire le chiffre 0.

 

Voici le code des 2 autres fichiers !

 


Le code de LaPage.php

 

<?php

// Inclusion du fichier des fonctions externes

include ("fonctions.inc"); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >

<head>

<meta http-equiv="Content-Language" content="fr">

<meta name="GENERATOR" content="Microsoft FrontPage 5.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>Page d'accueil</title>

</head>

<body>

<<?php

// Affichage du compteur de visites

AfficherCompteur (); ?>

<table border="1">

<caption>Bienvenue !</caption>

<tr><td>

Bonjour,<br />

Vous êtes sur une page qui affiche un petit compteur pas très élaboré mais qui fonctionne et que l'on peut facilement créer soi-même...<br />

Au boulot !

</td></tr>

</table>

</body>

</html>

 


Le code du fichier de fonctions, fonctions.inc :

 

<?php

// Fichier de fonctions externes

function AfficherCompteur () {

// Fonction qui comptabilise et qui affiche le nombre de visiteurs

// Ouverture en lecture du fichier texte "compteur.txt"

$canal = fopen ("compteur.txt","r");

// Récupération du contenu du fichier

$visites = fgets ($canal,5);

// Fermeture du fichier texte

fclose ($canal);

// Incrémentation du nombre de visiteurs

$visites = $visites+1;

// Ouverture du fichier "compteur.txt" en effaçant son contenu

$canal = fopen ("compteur.txt","w+");

// Écriture du nouveau nombre de visiteurs

fputs ($canal,$visites);

// Fermeture du fichier

fclose ($canal);

// Affichage du compteur dans la page

?> <!-- Nous venons de basculer en XHTML -->

<table border="3">

<tr><th colspan="2" align="center">

COMPTEUR DE VISITES

</th></tr>

<tr><td>

Depuis le "<em>Vendredi 13 novembre 2009</em>"<br />

<strong>Nombre de visiteurs</strong>

</td><td>

<font color="green">

<?php

echo $visites; ?>

</font></td></tr></table>

<?php }

 


Amélioration du mini compteur de visites

 

Dans ce chapitre, nous allons améliorer l’exploitation du mini compteur de visites.

 

Télécharger cet exemple >>

 

En effet, si le compteur de visites est placé dans la page d’accueil, ce qui est tout à fait normal, eh bien le nombre de visites sera systématiquement incrémenté dès que l’utilisateur retournera sur la page d’accueil depuis une autre page du site.

Pourquoi ?

Dès lors que nous revenons sur une page, celle-ci est exécutée dans son intégralité, et comme le compteur de visites n’échappe pas à cette règle, et bien, le nombre de visites augmente de « 1 ». Il en sera ainsi pour chaque retour sur la page contenant le compteur !

 

Que faire ?

Oh, trop fastoche !

On va utiliser une solution qui est très exploitée en PHP, c’est :

« Associer l’existence d’une variable de session à un évènement précis ».

 

En résumé, si l’on désire qu’un traitement ne soit exécuté qu’une seule fois durant une session de visite, on imbrique le traitement dans un embranchement conditionnel dont la condition est la « non existence » d’une variable de session.

Puis, dans le traitement, on crée la variable de session, ainsi, lors des prochaines exécutions de la page, le traitement ne sera plus exécuté puisque la variable de session existera !

 

Pour ce faire, je dois rappeler quelques aspects techniques :

 

Premièrement, il faut se rappeler que, contrairement aux variables locales, une variable de session n’est pas détruite lors de la fermeture d’une page. La variable de session est donc en fait une variable globale.

 

Deuxièmement, afin de pouvoir utiliser une variable de session, il faut que le code du fichier débute par la fonction :

SESSION_START ();

 

Troisièmement, Pour vérifier si une variable de session existe, il faut utiliser la fonction « isset » comme condition à un embranchement conditionnel « if ». Le paramètre de cette fonction étant bien sûr le nom de la variable de session pour laquelle on souhaite vérifier l’existence.

Par exemple :

if (isset($_SESSION["MaVariable"]))

 

Cinquièmement, pour créer une variable de session, il suffit de la pondre en lui affectant une chaîne vide, puisque sa valeur n’a vraiment aucune importance…

Par exemple :

$_SESSION["MaVariable"] = "";

 

Remarque :

Certains Webmaster élaborent des compteurs de visites relativement complexe afin qu’une même adresse IP soit comptabilisée qu’une seule fois dans une même journée. Pourquoi pas ! Seulement, il faudra changer l’intitulée du compteur !

En effet, s’agit-il d’un compteur de visites ou d’un compteur de visiteurs ?

 

En rajoutant le code nécessaire au fichier de fonctions externes proposé dans le chapitre précédant, Voici ce que ça donne…

 

<?php

// Fichier de fonctions externes

// Déclaration de l'utilisation des variables de SESSION

SESSION_START ();

function AfficherCompteur () {

// Fonction qui comptabilise et qui affiche le nombre de visiteurs

// Ouverture en lecture du fichier texte "compteur.txt"

$canal = fopen ("compteur.txt","r");

// Récupération du contenu du fichier

$visites = fgets ($canal,5);

// Fermeture du fichier texte

fclose ($canal);

// Vérifie si l'utilisateur vient d'arriver sur le site

if (!(isset($_SESSION["visiteur"]))) {

 // L'utilisateur vient juste d'arriver sur le site

 ; Création de la variable de session

 $_SESSION["visiteur") = "";

 // Incrémentation du nombre de visiteurs

 $visites = $visites+1;

 // Ouverture du fichier "compteur.txt" en effaçant son contenu

 $canal = fopen ("compteur.txt","w+");

 // Écriture du nouveau nombre de visiteurs

 fputs ($canal,$visites);

 // Fermeture du fichier

 fclose ($canal); }

// Affichage du compteur dans la page

?> <!-- Nous venons de basculer en XHTML -->

<table border="3">

<tr><th colspan="2" align="center">

COMPTEUR DE VISITES

</th></tr>

<tr><td>

Depuis le "<em>Vendredi 13 novembre 2009</em>"<br />

<strong>Nombre de visiteurs</strong>

</td><td>

<font color="green">

<?php

echo $visites; ?>

</font></td></tr></table>

<?php }

 

Philippe BOULANGER