Ouvrir, écrire et fermer un fichier
Enregistrer des données dans un fichier avec PHP
Nous avons appris à envoyer des données via des formulaires. Il nous vient maintenant à l'esprit de vouloir stocker ces données quelque part. Pour cela PHP nous propose plusieurs choix sur la façon de stocker les données : Entre autres, il est possible de les stocker dans des bases de données ou dans des fichiers.
L'accès aux fichiers locaux est rapide. C'est donc un avantage non négligeable d'utiliser les fichiers comme support de données. Toutefois, tout dépend de ce que vous voudrez faire avec les fichiers plus tard. Si vous avez peu de traitements et de tris à effectuer sur le contenu, l'utilisation des fichiers est plus intéressante que celle des bases de données.
PHP propose bon nombre de fonction pour la manipulation des fichiers, qui va de son ouverture à l'écriture dans un fichier texte, ou de la lecture d'un fichier texte jusqu'à sa fermeture. Avec toutes les richesses syntaxiques du langage, on peut même traiter des fichiers autres que les simples fichiers textes. Fichiers csv, par exemple.
Ouverture d'un fichier : fopen
La fonction fopen
La fonction PHP de base pour l'ouverture d'un fichier est la fonction fopen(). Sa syntaxe est la suivante :
fopen(fichier, mode);
Le premier argument de la fonction open peut être le nom du fichier lui-même ou un chemin d'accès vers le fichier lui-même :
Par exemple : /www/site/fichier.txt, ou fichier.txt
Mode d'ouverture
Le mode d'ouverture définit spécialement les accès au fichier. Le système d'exploitation a besoin de connaitre l'usage que vous voulez faire du fichier une fois qu'il sera ouvert. C'est à partir de là qu'il peut spécifier les accès : en mode écriture, lecture, etc. Autrement dit, ça lui permet de savoir :
- D'une part si vous avez les autorisations requises pour manipuler le fichier sous cette mode
- D'autre part si le fichier pourra être ouvert par un autre script une fois que vous l'aurez ouvert
Pour indiquer le mode d'ouverture du fichier on emploi une lettre et on le met en deuxième argument de la fonction fopen.
On a donc plusieurs possibilités :
On peut ouvrir le fichier en lecture seule, en écriture seule ou bien encore en lecture et en écriture. Pour écrire dans le fichier on peut soit écraser le contenu du fichier par les nouvelles données (c'est-à-dire tout effacer et tout réécrire), soit garder le contenu existant et y ajouter les nouvelles données à la suite.
En résumé, voici la liste des modes possibles avec leurs significations :
- r : Ouvre un fichier en lecture seule, place le pointeur en début de fichier (r pour read).
- r+ : Ouvre le fichier en lecture et écriture, place le pointeur en début de fichier.
- w : Ouvre un fichier en écriture seule, place le pointeur en début de fichier. Si le fichier existe déjà, son contenu est écrasé, dans le cas contraire il crée le fichier (w pour write).
- w+ : Ouvre le fichier en mode lecture et écriture, place le pointeur au début du fichier. Si le fichier existe déjà, son contenu est écrasé, dans le cas contraire, il crée le fichier.
- a : Ouvre le fichier en écriture seule, place le pointeur à la fin du fichier. Si le fichier n'existe pas, on tente de le créer (a pour append).
- a+ : Ouvre le fichier en mode lecture et en écriture, place le pointeur à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
Ecriture dans un fichier : fwrite
La fonction fwrite
La fonction utilisée pour l'écriture dans un fichier est la fonction fwrite().
Selon le prototype suivant, elle peut posséder 3 arguments :
int fwrite ( resource fichier, string chaine [, int longueur])
Elle retourne une valeur de type int qui correspond au nombre de bytes écrites ou FALSE en cas d'erreur. Le troisième paramètre qui est facultatif est la longueur. Lorsqu'il est spécifié, il indique le nombre maximal d'octets à écrire.
Voici un exemple d'utilisation de fwrite, avec ses deux arguments. Il tentera de créer le fichier :
<?php $fp=fopen("fichier.txt", "w"); //ouverture du fichier en mode écriture, création du fichier s'il n'existe pas. fwrite($fp,"Un texte dans votre fichier"); // insert le texte: Un texte dans votre fichier. ?>
Reprenons le même fichier, mais en spécifiant le troisième paramètre :
<?php $fic=fopen("fichier.txt", "w"); //ouverture du fichier en mode écriture, écrasement du contenu s'il existe fwrite($fic,"Un texte dans votre fichier",8);// insert les 8 premiers caractères de la chaîne : Un texte ?>
La fonction fwrite n'est qu'un exemple de fonction pour l'écriture dans un fichier texte mais il y en a encore d'autres.
La fonction fputs() par exemple, ne présente pas de différence importante avec fwrite() c'est juste son alias.
Une autre fonction très intéressante à connaitre est la fonction file_put_contents. Elle prend en paramètre une adresse de fichier et une chaine de caractères. En effet, dans les versions récente de PHP, on a essayé de rendre plus rapide certaines opérations. Avec la fonction file_put_contents il n'est pas nécessaire d'ouvrir un fichier. Ce dernier se créera automatiquement ou s'il existe déjà, son contenu sera écrasé.
Fermeture d'un fichier : fclose
Après tout traitement effectué sur un fichier, on doit le fermer par la fonction fclose() comme suit :
<php fclose($fic); ?>
Cette fonction retourne true si la fermeture du fichier a réussi et false dans le cas contraire.