Le PHP met à notre disposition de nombreuses fonctions nous permettant de travailler avec les fichiers (quasiment une centaine !) car la manipulation de fichiers est un sujet complexe et pour lequel les problématiques peuvent être très différentes et très précises.
Nous n’allons pas dans ce cours explorer le sujet à 100% car cela serait très indigeste et rajouterait beaucoup de complexité « inutilement » mais allons plutôt présenter les cas de manipulation de fichiers les plus généraux et les fonctions communes liées.
La manipulation de fichiers en PHP
En PHP, nous allons pouvoir manipuler différents types de fichiers comme des fichiers texte (au format .txt
) ou des fichiers image par exemple. Bien évidemment, nous n’allons pas pouvoir effectuer les mêmes opérations sur chaque type de fichier.
Dans ce cours, nous allons particulièrement nous intéresser à la manipulation de fichiers texte puisque ce sont les fichiers qu’on manipule le plus souvent en pratique et car nous allons pouvoir stocker du texte dans ce type de fichier.
En effet, jusqu’à présent, nous n’avons appris à stocker des informations que de manière temporaire en utilisant les variables « classiques », les cookies ou les sessions. L’utilisation de fichiers en PHP va nous permettre entre autres de stocker de façon définitive des informations.
Les fichiers vont donc nous offrir une alternative aux bases de données qui servent également à stocker des informations de manière organisée et définitive et que nous étudierons plus tard dans le cours même s’il faut bien admettre qu’on préférera dans la majorité des cas utiliser les bases de données plutôt que les fichiers pour enregistrer les données.
Il reste néanmoins intéressant d’apprendre à stocker des données dans des fichiers car on préfèrera dans certains cas stocker des données dans des fichiers plutôt que dans des bases de données (par exemple lorsqu’on laissera la possibilité aux utilisateurs de télécharger ensuite le fichier avec ses différentes informations à l’intérieur).
Par ailleurs, la manipulation de fichiers ne se limite pas au stockage de données : nous allons pouvoir effectuer toutes sortes d’opérations sur nos fichiers ce qui représente un avantage indéniable.
Lire un fichier entier en PHP
L’une des opérations de base relative aux fichiers en PHP va tout simplement être de lire le contenu d’un fichier.
Il existe deux façons de faire cela : on peut soit lire le contenu d’un fichier morceau par morceau, chose que nous apprendrons à faire dans la prochaine leçon, soit lire un fichier entièrement c’est-à-dire afficher tout son contenu d’un coup.
Pour faire cela, on va pouvoir utiliser l’une des fonctions suivantes :
- La fonction
file_get_contents()
; - La fonction
file()
; - La fonction
readfile ()
;
On va devoir passer le chemin relatif menant au fichier qu’on souhaite lire en argument de chacune de ces fonctions.
La fonction file_get_contents()
va retourner le contenu du fichier dans une chaine de caractères qu’il faudra echo
pour afficher ou la valeur booléenne false
en cas d’erreur.
La fonction file()
est identique à file_get_contents()
à la seule différence que le contenu du fichier sera renvoyé dans un tableau numéroté. Chaque ligne de notre fichier sera un nouvel élément de tableau.
La fonction readfile()
va elle directement lire et afficher le contenu de notre fichier.
Pour illustrer le fonctionnement de ces trois fonctions, je vous invite à créer un premier fichier de texte, c’est-à-dire un fichier enregistré avec l’extension .txt
.
Personnellement, j’utiliserai un fichier que j’ai appelé exemple.txt
et qui contient le texte suivant :
Pour créer ce fichier texte, vous pouvez par exemple vous servir de votre éditeur. Je vous conseille ici de l’enregistrer dans le même dossier que notre fichier cours.php
pour plus de simplicité.
Dès que le fichier est créé et enregistré, nous allons tenter de l’afficher dans notre script :
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php echo file_get_contents('test.txt'); echo '<br><br>'; echo '<pre>'; print_r(file('test.txt')); echo '</pre>'; echo '<br><br>'; readfile('test.txt'); ?> <p>Un paragraphe</p> </body> </html>
Ici, on utilise nos trois fonctions file_get_contents()
, file()
et readfile()
à la suite pour lire et afficher notre fichier. Comme vous pouvez le voir, file_get_contents()
et readfile()
produisent un résultat similaire mais il faut echo
le résultat renvoyé par file_get_contents()
pour l’afficher tandis que readfile()
affiche directement le résultat.
La fonction file_get_contents()
nous donne donc davantage de contrôle sur la valeur renvoyée puisqu’on va pouvoir l’enfermer dans une variable pour la manipuler à loisir.
Conserver la mise en forme d’un fichier avant affichage
Dans l’exemple ci-dessus, on s’aperçoit que les retours à la ligne et les sauts de ligne contenus dans notre fichier texte ne sont pas conservés lors de l’affichage du texte dans le navigateur.
Cela est normal puisque nos fonctions vont renvoyer le texte tel quel sans y ajouter des éléments HTML indiquant de nouvelles lignes ou des sauts de ligne et donc le navigateur va afficher le texte d’une traite.
Pour conserver la mise en forme du texte, on va pouvoir utiliser la fonction nl2br()
qui va se charger d’ajouter des éléments br
devant chaque nouvelle ligne de notre texte. On va passer le texte à mettre en forme en argument de cette fonction.
On va par exemple pouvoir utiliser cette fonction sur le résultat renvoyé par file_get_contents()
avant de l’afficher. En revanche, on ne va pas pouvoir l’utiliser avec readfile()
puisque cette fonction va directement afficher le résultat sans que nous puissions exercer un quelconque contrôle dessus.
<!DOCTYPE html> <html> <head> <title>Cours PHP & MySQL</title> <meta charset="utf-8"> <link rel="stylesheet" href="cours.css"> </head> <body> <h1>Titre principal</h1> <?php echo nl2br(file_get_contents('test.txt')); echo '<br><br>'; echo '<pre>'; print_r(file('test.txt')); echo '</pre>'; echo '<br><br>'; readfile('test.txt'); ?> <p>Un paragraphe</p> </body> </html>
Ici, on effectue plusieurs opérations en une seule ligne. Comme d’habitude, lorsqu’on utilise plusieurs fonctions ensemble, c’est la fonction la plus interne dans notre code qui va s’exécuter en premier puis la fonction qui l’englobe va s’exécuter ensuite sur le résultat de la première fonction.
Dans notre cas, file_get_contents()
s’exécute donc en premier et renvoie le contenu de notre fichier puis nl2br()
s’exécute ensuite sur le résultat renvoyé par file_get_contents()
(c’est-à-dire le texte de notre fichier) et ajoute des éléments br
à chaque nouveau retour à la ligne. Finalement, la structure de langage echo
permet d’afficher le résultat (le texte avec nos éléments br
.