fopen() : lire et écrire dans un fichier
Certaines fonctions PHP permettent de lire et d'écrire dans un fichier. C'est la cas de la fonction fopen() que nous allons voir ici.
Pour ouvrir un fichier, nous utilisons donc la fonction fopen() auquel nous passons 2 "arguments" qui sont l'url du fichier et ce que l'on souhaite y faire.
Schématiquement, cela nous donne :
fopen("url du fichier", "Mode d'ouverture").
Il existe plusieurs "mode d'ouverture" d'un fichier en fonction de ce que l'on veut y faire. Par exemple, juste lire la première ligne, tout lire, écrire, effacé, etc...
En voici les définitions dans le tableau ci-dessous :
| Mode | Signification |
|---|---|
| r | Ouvre le fichier en lecture seule et place le pointeur au début du fichier. |
| r+ | Ouvre le fichier en lecture et écriture et place le pointeur au début du fichier. |
| w | Ouvre le fichier en écriture seule et place le pointeur au début du fichier. Si le fichier existe déja, il sera réduit à 0 (effacé). Si le fichier n'existe pas, on tente de le créer. |
| w+ | Ouvre le fichier en lecture et écriture et place le pointeur au début du fichier. Si le fichier existe déja, il sera réduit à 0 (effacé). Si le fichier n'existe pas, on tente de le créer. |
| a | Ouvre le fichier en écriture seule et place le pointeur à la fin du fichier (rien ne sera éffacé). Si le fichier n'existe pas, on tente de le créer. |
| a+ | Ouvre le fichier en lecture et écriture et place le pointeur à la fin du fichier. Si le fichier n'existe pas, on tente de le créer. |
Lire un fichier avec fopen()
Comme dit plus haut, pour ouvrir un fichier, on utilise donc la fonction
fopen() auquel nous y passons les 2 paramètres (url et mode d'ouverture) fopen("mon-fichier.txt", "r");Pour plus de simplicité, on utilise une variable attribué à cette fonction :
<?php $fichier_a_ouvrir = fopen("mon-fichier.txt", "r"); //Suite du code ?>Le fichier étant maintenant ouvert, il faut pouvoir en lire le contenue. Pour ce faire, on utilise la fonction
fgets() auquel nous allons y passer 2 arguments qui sont l'url du fichier et le nombre de caractères à lire : fgets($fichier_a_ouvrir, 1024);Pour plus de simplicité, on utilise également une variable attribué à cette fonction :
<?php $fichier_a_ouvrir = fopen("mon-fichier.txt", "r"); $contenu_du_fichier = fgets($fichier_a_ouvrir, 1024); //Suite du code ?>Il est à noter que la fonction fgets() lit toujours une "ligne" avec une limite éventuelle sur la taille de cette ligne (1024). Si par exemple vous omettez d'attribuer une limite, c'est uniquement la première ligne qui sera lut. Au contraire, si vous attribuez une chiffre plus petit que le nombre de caractère réelle sur la première ligne de votre fichier, la fonction lira uniquement les X nombres de caractères demandés.
Maintenant que le contenu de notre fichier est "enregistré" dans notre variable
$contenu_du_fichier, nous fermons la connexion au fichier grâce à la fonction fclose() auquel nous passons en paramètre l'url du fichier : fclose($fichier_a_ouvrir);Ceci fait et pour afficher le contenu de notre fichier, on fait un simple
echo : echo $contenu_du_fichier;Notre code donne donc à la finale :
<?php //Ouverture du fichier en lecture seul $fichier_a_ouvrir = fopen("mon-fichier.txt", "r"); //Lecture de la 1ère ligne $contenu_du_fichier = fgets($fichier_a_ouvrir, 1024); //Fermeture du fichier fclose ($fichier_a_ouvrir); //Affichage du contenu echo $contenu_du_fichier; ?>Pour lire l'intégralité d'un fichier, c'est presque la même chose à l'exception près que l'on utilise une boucle
while() et la fonction feof() qui permet de vérifier si on est à la fin du fichier.<?php //Ouverture du fichier en lecture seul $fichier_a_ouvrir = fopen("mon-fichier.txt", "r"); // On boucle et tant que l'on n'est pas la fin du fichier ,on continue de le lire.Pour lire et afficher un nombre bien précis de ligne, on utilise une boucle
La fonction feof vérifie si on se trouve à la fin du fichier. while(!feof($fichier_a_ouvrir)) { $contenu_du_fichier = fgets($fichier_a_ouvrir, 1024); //Affichage du contenu echo $contenu_du_fichier; } //Fermeture du fichier fclose ($fichier_a_ouvrir); ?>
for() :<?php $fichier_a_ouvrir = fopen ("mon-fichier.txt", "r"); //Nombre de ligne à lire for ($ligne = 1 ; $ligne <= 3 ; $ligne++) { $texte = fgets($fichier_a_ouvrir); echo $texte ; } fclose ($fichier_a_ouvrir); ?>
Ecrire dans un fichier avec fwrite()
Pour écrire dans un fichier, on utilise la fonctionfwrite() auquel on passe en argument l'url du fichier et ce que l'on veut écrire. Schématiquement, cela nous donne :
fwrite(Fichier à ouvrir,"Mon texte");
Supposons que l'on veuille écrire à la fin de notre fichier (mon-fichier.txt) sans en effacer le contenu. On sait par apport au tableau que la lettre "a" permet l'écriture et positionne le curseur en fin de fichier sans rien effacer.
Notre code sera donc :
<?php $fichier_a_ouvrir = fopen ("mon-fichier.txt", "a"); fwrite($fichier_a_ouvrir,"Bonjour et bienvenue sur créer un site :)!<br/>"); fclose ($fichier_a_ouvrir); ?>En supposant maintenant que vous ayez l'esprit un peut tordut
et que vous souhaitez à la fois écrire en fin de fichier puis lire l'intégralité du fichier, il faudrat utiliser une autre fonction qui est la fonction fseek(). Cette fonction permet de modifier la position du curseur dans votre fichier.fseek(Fichier à ouvrir, position du curseur);
Explication :
Pour lire et écrire en fin de fichier, on utilise le mode "a+". Nous devons donc dans un premier temps écrire dans le fichier puis ensuite le lire. Le soucis, c'est que le mode "a+" place le curseur en fin de fichier et donc si on lit en fin de fichier ... forcément il n'y a rien ...vous me suivez
!! C'est là qu'intervient la fonction fseek() en repositionnant le curseur qui est en fin de fichier, au début de celui-ci, permettant ainsi de le lire.Une petite démonstration commenté pour bien comprendre :
<?php //Ouverture + lecture/écriture $fichier_a_ouvrir = fopen ("mon-fichier.txt", "a+"); //On écrit dans le fichier fwrite($fichier_a_ouvrir,"Bonjour et bienvenue sur créer un site :)!<br/>"); //On replace la position du pointeur en début de fichier en le mettant à zéro fseek($fichier_a_ouvrir, 0); //On boucle pour lire toutes les lignes while (!feof($fichier_a_ouvrir)) { $ligne = fgets($fichier_a_ouvrir, 1024); //Ecrit la chaîne lue echo $ligne; } fclose ($fichier_a_ouvrir); ?>
Prenons maintenant l'exemple d'un compteur ou le nom du fichier est contenu dans une variable ($fichier = "compteur.txt";) tout comme l'incrémentation ($ligne++;). Le code doit au préalable vérifier l'existance du fichier (if(!file_exists($fichier))) et au besoin le créer. Si le code créer le fichier, il faut en même temps l'incrémenter de "1" puisque c'est la première visite (fwrite($fichier_a_ouvrir,"1");). Au contraire, si le fichier existe, il faut juste incrémenter le compteur de "1" ($ligne++) pour chaque visite.
<?php //On créé une variable pour donner un nom au fichier $fichier = "compteur.txt"; //On vérifie si le fichier existe if(!file_exists($fichier)) { //Si le fichier n'existe pas, on le créé avec les droits en lecture et écriture
et place le pointeur au début du fichier $fichier_a_ouvrir = fopen ($fichier, "w+"); //On lit la première ligne $ligne = fgets($fichier_a_ouvrir); //Comme le fichier vient d'être créé et qu'il est vide, on le met à 1 puisque
c'est la première visite if($ligne == "") { fwrite($fichier_a_ouvrir,"1"); } } else { //Si le fichier existe, on ouvre le fichier en lecture et écriture et place le
pointeur au début du fichier. $fichier_a_ouvrir = fopen ($fichier, "r+"); //On lit la première ligne (donc on récupère le chiffre contenu dans le fichier) $ligne = fgets($fichier_a_ouvrir); //On incrémente de 1 ce même chiffre $ligne++; //On replace le curseur en début de fichier fseek($fichier_a_ouvrir, 0); //On écrit le nouveau chiffre fwrite($fichier_a_ouvrir,$ligne); //On affiche le résultat echo 'Cette page à été vu : <b>'.$ligne.'</b> fois.'; } //On ferme la connexion fclose ($fichier_a_ouvrir); ?>


Signaler une erreur
Date et heure en PHP
Le langage PHP
Les sessions PHP



