Mode de lecture "r"

Il est possible pour PHP de lire un fichier et d'en afficher le contenu.
Pour notre exemple, nous utiliserons le fichier test.txt que voici :


Bonjour,
Pouvez vous lire ce qui est écrit ici ?
Si oui, bonne journée ! 

        

Peu importe qu'on lise ou écrive un fichier, il faudra toujours commencer par l'ouvrir :
$variable = fopen("chemin et nom du fichier");
Puis une fois fini, le fermer, car ouvrir trop de fichier sans les fermer jouera sur les performances de votre serveur :
fclose($variable);


// On ouvre mon fichier en lecture seule.
$fichier = fopen("fichiers/test.txt", "r");
// On affiche notre fichier. 
echo fread($fichier, filesize("../test.txt"));
// je ferme mon fichier.
fclose($fichier);

        

Dans l'exemple si dessus, vous pouvez voir un "r" en second argument de fopen, cela signifie que le fichier est ouvert en lecture seule. Dans ce mode, on ne peut donc que le lire.
Ensuite avec la fonction fread, on peut choisir quel fichier et jusqu'où le lire. On peut utiliser la fonction filesize() pour obtenir la taille complète du fichier et ainsi lire la totalité du fichier.
Cet echo affichera :


Bonjour, Pouvez vous lire ce qui est écrit ici ? Si oui, bonne journée ! 

        

Comme vous pouvez le voir, fread ne pourra pas interprêter les sauts de ligne classique. Mais en utilisant nl2br() alors ils pourront être lu.
tel que :


echo nl2br(fread($fichier, filesize("../test.txt")));

        

Affichera le texte comme il était à l'origine.
Voyons ensuite fgets():


$fichier = fopen("../test.txt", "r");
// fgets ne lis les lignes qu'une à une.
echo fgets($fichier);
fclose($fichier);

        

fgets() lit la première ligne du fichier, et garde en mémoire où il s'est arrêté, de ce fait, si on l'appel une nouvelle fois, il lira la seconde ligne et ainsi de suite.
le code si dessus affichera :


Bonjour,

        

Il est possible là aussi de lire tout le fichier grâce à une petite astuce appelé feof(). Cette fonction teste si on est arrivé à la fin du fichier, c'est son nom d'ailleur feof signifie File End Of File.


// Tant qu'on n'est pas à la fin du fichier.
while(!feof($fichier)){
    echo fgets($fichier);
}

        

La fonction suivante verra les choses encores plus petite, puisqu'elle lira les caractères un à un.


$fichier = fopen("../test.txt", "r");
// fgetc lit les caractères un à un.
echo fgetc($fichier);
fclose($fichier);

        

Dans l'exemple si dessus fgetc() est appelé une seule fois, affichera donc le premier caractère, et si on l'appelle encore une fois, lira le second caractère, et ainsi de suite.
Le code si dessus affiche :


B

        

Mode d'écriture "w"

Lire c'est bien, mais si l'on souhaite écrire un fichier?
Rien de bien compliqué ici, il nous suffira de changer la lettre lors de l'ouverture du fichier.


$fichier = fopen("../test.txt", "w");
$txt = "Salut, \n
    Je suis un simple fichier texte \n
    Il n'y a aucun code dans ce fichier.";
// fwrite prend en paramètre un fichier et 
// une chaîne de caractère et s'en sert pour 
// écrire dans le fichier.
fwrite($fichier, $txt);
fclose($fichier);

        

On peut voir ici qu'on ouvre le fichier et le ferme comme d'habitude, si ce n'est cette lettre qui s'est changé en "w".
Cela dit ce n'est pas tout, nous utilisons la fonction fwrite() pour écrire. Cette fonction prend en premier argument notre fichier et en second la chaîne de caractère que l'on souhaite écrire.
Attention, pas de <br> ici, un fichier texte utilisera "\n" pour un retour à la ligne. Ainsi que d'autres caractères échappés "\" pour différents effets.
Maintenant ouvrons notre fichier test.txt :


Salut, 
Je suis un simple fichier texte 
Il n'y a aucun code dans ce fichier.

        

Ah? Où est passé notre texte d'origine?
Et bien le mode d'écriture "w" efface le contenu précédent pour le remplacer par la nouvelle chaîne de caractère.
Faites donc bien attention à ce que vous faites, si vous ne souhaitez pas perdre de données.


// mettons un nom de fichier inexistant.
$fichier = fopen("../test2.txt", "w");
$txt = "Cela provoquera sûrement une erreur.";
fwrite($fichier, $txt);
fclose($fichier);

        

Si vous lancez ce code avec un nom de fichier inexistant, vous vous attendez sûrement à une erreur, mais vous avez tord.
Voilà toute la puissance de ces fonctions, en faisant cela vous n'avez pas créé une erreur mais un fichier.
Si la fonction ne trouve pas de fichier portant ce nom, elle en fabriquera un nouveau.
On peut d'ailleurs ouvrir ce test2.txt et on verra :


Cela provoquera sûrement une erreur.

        

Mode d'ajout "a"

Voici un troisième mode, le mode d'ajout (append). qui comme le nom l'indique se contentera d'ajouter du contenu sans éffacer le contenu précédent du fichier.


$fichier = fopen("../test.txt", "a");
fwrite($fichier, "\n P.S: Ce coup si on n'efface rien.");
fclose($fichier);

        

On utilise toujours fwrite() pour écrire, seulement après avoir effectué ce code, nous obtiendrons :


Salut, 
Je suis un simple fichier texte 
Il n'y a aucun code dans ce fichier.
P.S: Ce coup si on n'efface rien.

        

Le texte a bien été ajouté sans rien effacer.

Fichiers complets :

  • Lecture
  • Écriture
  • Ajout

// On ouvre mon fichier en lecture seule.
$fichier = fopen("fichiers/test.txt", "r");
// On affiche notre fichier. 
echo fread($fichier, filesize("../test.txt"));
// nl2br permet de lire les caractères spéciaux
// tel que les retours à la ligne.
echo nl2br(fread($fichier, filesize("../test.txt")));
// je ferme mon fichier.
fclose($fichier);

$fichier = fopen("../test.txt", "r");
// fgets ne lis les lignes qu'une à une.
echo fgets($fichier);
// Tant qu'on n'est pas à la fin du fichier.
while(!feof($fichier)){
    echo fgets($fichier);
}
fclose($fichier);

$fichier = fopen("../test.txt", "r");
// fgetc lit les caractères un à un.
echo fgetc($fichier);
fclose($fichier);

                

$fichier = fopen("../test.txt", "w");
$txt = "Salut, \n
    Je suis un simple fichier texte \n
    Il n'y a aucun code dans ce fichier.";
// fwrite prend en paramètre un fichier et 
// une chaîne de caractère et s'en sert pour 
// écrire dans le fichier.
fwrite($fichier, $txt);
fclose($fichier);

// mettons un nom de fichier inexistant.
$fichier = fopen("../test2.txt", "w");
$txt = "Cela provoquera sûrement une erreur.";
fwrite($fichier, $txt);
fclose($fichier);
// Nous venons de créer un nouveau fichier.

                

// Le texte est ajouté sans aucune suppression.
$fichier = fopen("../test.txt", "a");
fwrite($fichier, "\n P.S: Ce coup si on n'efface rien.");
fclose($fichier);