fopen() : lire et écrire dans un fichier

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.

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. 
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); ?>
Pour lire et afficher un nombre bien précis de ligne, on utilise une boucle 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 fonction fwrite() 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); ?>

Voir/déposer un commentaire (0) | Signaler un problème