
Maintenant que les données sont récupérées, il est intéressant de pouvoir les stocker. Le moyen le plus facile et le plus rapide est l'utilisation d'un fichier. Nous allons aborder de manière très rapide comment se servir des fichiers.
La fonction fopen()
C'est la fonction de base, celle qui permet d'ouvrir un fichier. Après ouverture, il est possible de lire, d'écrire et bien sur de fermer le fichier. La fonction fopen() permet également de créer un fichier.
Important : un fichier ouvert doit toujours être refermé avec fclose().
La syntaxe de fopen() est la suivante :
fopen("nom_du_fichier","mode");
Le mode, symbolisé par une lettre, indique le type d'opération réalisable après l'ouverture. Il définit également où va se trouver le pointeur. En voici la liste.
Les modes |
Mode |
Description |
a |
Ouverture en écriture seule à la fin du fichier (créer un fichier s'il n'existe pas) |
a+ |
Ouverture en lecture-écriture à la fin du fichier (créer un fichier s'il n'existe pas) |
r |
Ouverture en lecture seule au début du fichier |
r+ |
Ouverture en lecture-écriture au début du fichier |
w |
Ouverture en écriture seule au début du fichier (créer un fichier s'il n'existe pas) |
w+ |
Ouverture en lecture-écriture au début du fichier (créer un fichier s'il n'existe pas) |
Ainsi, nous avons 3 modes définis :
- a (append), mode ajout,
- r (read), mode lecture
- w (write), mode écriture
Lorsque le mode est suivi du caractère "+" celui-ci peut être lu et écrit.
Petite précision : ce que j'ai appelé "pointeur" n'est autre que la petite barre verticale clignotante qui, dans tout document texte, indique là où le texte apparaîtra si j'écris quelque chose.
Exemple :
<?php
/* En mode lecture-écriture, ouvre le fichier et place le pointeur au début. */
$pointeur=fopen("fichier.txt","w+");
...
fclose($pointeur);
?>
Notons que pour l'écriture il est préférable d'utiliser le mode ajout car le mode écriture écrase les données déja présentes sur le fichier.
fgets() et fputs() ou "comment lire et écrire ?"
C'est bien beau d'ouvrir un fichier mais encore faut-il pouvoir y lire ses données ou bien en écrire de nouvelles. C'est le but des fonction fgets() et fputs().
La fonction fgets() permet de lire une ligne dans le fichier ouvert. Il prend comme paramètres la variable contenant le fichier ouvert et la longueur (nombre de caractères +1) que va renvoyer la fonction. Elle va renvoyer 0 si la fonction a échoué.
Syntaxe : fgets("fichier_ouvert",longueur);
La fonction fputs() permet d'écrire une ligne dans le fichier ouvert. Il prend comme paramètres la variable contenant le fichier ouvert et la valeur textuelle que l'on veut insérer dans le fichier.
Syntaxe : fputs("fichier_ouvert","texte");
Pour l'exemple je vais encore faire simple avec la création d'un compteur :
<?php
/* Ouverture du fichier en mode lecture-écriture */
$pointeur=fopen("compteur.txt","w+");
/* Récupération du contenu dans le fichier ouvert */
$compteur=fgets($pointeur,10);
/* Affichage du compteur */
echo $compteur;
/* On revient au début du fichier */
rewind($pointeur);
/* Incrémentation du compteur */
$compteur++;
/* Ecriture sur le fichier */
fputs($pointeur,$compteur);
/* Fermeture du fichier */
fclose($pointeur);
?>
Etant donné qu'il fallait d'abord lire le fichier avant d'écrire par-dessus le mode w+ était ici, plus judicieux que le mode a+ qui aurait mis à jour le compteur à la fin du fichier. Autrement dit, au lien de passer de 1 à 2, le compteur serait passé de 1 à 12 ! Nous avons vu, aussi la fonction rewind() et je pense que le commentaire placé au dessus définit parfaitement ce qu'il fait.
Autre remarque : ce compteur ne reflète pas le nombre de personnes qui ont visité la page mais le nombre de fois où la page a été chargée. Cela fait une grande différence. La solution réside dans la combinaison des cookies (que nous aborderons plus loin), des structures conditionnelles et des fichiers. Essayez de recharger cette page et vous verrez que le compteur, en haut du menu, n'a pas augmenté (sauf si vous n'êtes pas tout seul dessus).
La fonction feof() :
Les fonctions de lecture et écriture sont très pratique mais elles ont un défaut, c'est qu'elles ne permettent de lire ou d'écrire qu'une ligne à la fois. Cela ne gêne pas trop avec l'écriture car une simple itération résout le problème. Mais pour la lecture, il nous manque une information : là où se termine le fichier.
C'est pourquoi il existe la fonction feof() qui permet de savoir si l'on est arrivé à la fin du fichier. Lorsqu'on y arrive ce n'est plus la peine de lire. La procédure est donc simple désormais : il suffit de tester si la fin du fichier à été atteinte avant de recommencer à lire une ligne. Encore une fois, une itération est plus que nécessaire.
D'abord la syntaxe :
...feof("fichier_ouvert")...;
Pour l'exemple qui suit j'utilise un fichier "alpha.txt" comportant 26 ligne. Sur chaque ligne est écrit une lettre de l'alphabet.
Exemple :
<?php
$pointeur=fopen("alpha.txt","r");
/* Tant que non fin de fichier */
while (!feof($pointeur)){
$ligne=fgets($pointeur,2);
echo $ligne;
}
fclose($pointeur);
?>
Résulat >>
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
|