Lire le contenu d'un fichier
Par Armel FAUVEAU, mardi 11 février 2003 à 21:59 :: Lu sur le Web :: #501 :: rss
Il existe de nombreuses méthodes permettant de lire le contenu d'un fichier. La version 4.3.0 de PHP vient même compléter la liste en proposant, comme nous le constaterons, une nouvelle fonction. Nous allons donc présenter ici les principales méthodes dont nous disposont.
La première, décrite dans la FAQ de PHPIndex, suit une approche des plus classique, clairement inspirée du langage C. Elle repose sur l'utilisation de la fonction fread, fopen et fsize. Exemple :
<?php $fichier='monfichier'; $contenu = fread(fopen($fichier, "r"), filesize($fichier)); print $contenu; ?>Le contenu du fichier est placé dans une chaine. Il peut alors être affiché. Mais il peut aussi subir d'éventuels traitements intermédiaires. Par exemple, l'application d'une expression rationnelle et d'un simple str_replace() afin de remplacer une occurence.
Maintenant, il est parfois utile de lire un fichier ligne par ligne et de récuppérer ces lignes dans un tableau. Dans ce cas, on peut toujours utiliser la méthode précédente, puis faire un explode() ou un split() en fonction du motif de fin de ligne (généralement un \n, mais attention aux disparités suivant les systèmes d'exploitation). Exemple :
<?php
$contenu_array = explode("\n",$contenu);
print_r($contenu_array);
?>
Une méthode plus simple pour obtenir ce résultat repose sur l'utilisation de la fonction file(). Cette fonction a été introduite par PHP4. Et elle permet de lire la totalité d'un fichier et de mettre son contenu dans un tableau, chaque élément correspondant à une ligne du fichier. Ainsi, la combinaison des deux exemples précédents peut-être obtenue par le code suivant, beaucoup plus concis :<?php $fichier = 'mon_nom_de_fichier'; $contenu_array = file($fichier); print_r($contenu_array); ?>La fonction file() permet donc ici l'économie d'une lecture faisant appel à fread(), fopen() et filesize(), sans oublier explode() ou split() afin d'obtenir le tableau final souhaité.
Mais après tout, n'est-il pas possible, toujours en utilisant file(), d'obtenir l'ensemble du fichier dans une chaine, si la structure en tableau n'est pas nécessaire ? Si évidement ! On utilisera pour cela la fonction connexe à explode(), à savoir, implode(). Exemple :
<?php
$fichier = 'mon_nom_de_fichier';
$contenu_array = file($fichier);
print_r($contenu_array);
$contenu_string = implode('', file($fichier));
print $contenu_string;
?>
C'est pas mal, on a donc définitivement éliminé fread(), fopen() et filesize(). Mais n'y a t-il pas encore plus simple pour obtenir l'intégralité d'un fichier dans une chaine ? C'est là qu'intervient PHP 4.3.0 et la fonction file_get_contents. Le code précédent peut alors être avantageusement remplacé par :<?php $fichier = 'mon_nom_de_fichier'; $contenu_string = file_get_contents($fichier); print $contenu_string; ?>Je ne m'exprimerais pas sur la pertinence du 's' figurant à la fin du nom de cette fonction, mais je n'en pense pas moins :) Cela fera peut-être l'objet d'un article futur du reste :p
Maintenant, ce que l'on peut retenir c'est qu'en une ligne de code, file_get_contents() permet de récupérer le contenu d'un fichier dans une chaine, et file() dans un tableau.
La section filesysteme du manuel
file
file_get_contents







Commentaires
#1 - Le lundi 31 juillet 2006 à 18:50, par dakkoo
#2 - Le jeudi 3 janvier 2008 à 19:07, par Lebasque
#3 - Le vendredi 19 février 2010 à 22:22, par Philou
#4 - Le lundi 24 mai 2010 à 21:06, par abaya
#5 - Le vendredi 21 janvier 2011 à 12:39, par plateforme forex
#6 - Le mercredi 15 juin 2011 à 22:50, par hazimthebear
#7 - Le vendredi 11 novembre 2011 à 00:37, par axel
Ajouter un commentaire
Vous pouvez soumettre un commentaire en remplissant le formulaire ci-dessous. Toutes les contributions font l'objet d'une étape de modération par notre équipe.
Le code HTML dans le commentaire sera affiché comme du texte, les adresses internet seront converties automatiquement.