Pour les exemples, nous utiliserons le fichier "commentaires.txt" du dossier test_fichiers.
- Le fichier contient des commentaires laissés par les
visiteurs d'un site.
- Un enregistrement "commentaire" est composé de 4 zones : nom
du visiteur, adresse email, date du commentaire, texte du
commentaire.
- Les zones sont séparées par le caractère |.
- Les enregistrements sont séparés par une marque de nouvelle
ligne (line feed, soit \n).
Gaston Lagaffe|gl@xyz.com|22/10/2012|Quel excellent site sur
JAVA.<br>Je le recommande à tous les internautes.
Florence
Arto|lamer@quonvoitdanser.fr|25/10/2012|La navigation est parfois
difficile mais les<br>recherches sont toujours récompensées.
Darth V|dv@starwars.com|27/10/2012|Je sens la FORCE ici ...
Le
Grinch|grinch@couine.com|27/10/2012|Ce site est nul. Venez plutôt
voir le mien : http://www.zegrinch.com
Si vous ne voyez pas le dossier test_fichiers
et le fichier commentaires.txt, ou si
vous voulez le ré-initialiser utilisez
ce script.
Lire un fichier entier (tableau)
La façon la plus simple de lire un fichier est d'utiliser la
fonction file()
qui :
- ouvre le fichier,
- lit son contenu entier,
- ferme le fichier,
- renvoie le contenu du fichier sous la forme d'un
tableau à indices numériques. Les élements du tableau sont constitués de chacune
des lignes du fichier (marquées par un caractère de saut de ligne).
file()
est donc particulièrement adaptée pour lire des fichiers contenant
des enregistrements de longueur variable, séparés par une
marque de nouvelle ligne (par défaut \r\n sous Windows, \n
sous un autre système), et d'une taille.
Pour extraire les différents champs d'un enregistrement, nous
pouvons utiliser la fonction explode()
avec le caractère | comme délimiteur.
Lire un fichier entier (buffer)
Nous pouvons récupèrer le contenu d'un fichier
dans un buffer : une variable qui recevra tout le contenu du
fichier.
Nous devons alors exécuter les
opérations suivantes :
- ouvrir le fichier avec la fonction fopen()
qui renvoie un pointeur sur la ressource (le fichier physique), ou
FALSE si le fichier ne peut pas être ouvert (pas les permissions,
mauvais nom, etc.). La fonction accepte comme premier argument le
nom du fichier à ouvrir et comme second argument le type
d'opération à effectuer, ici r pour read.
- lire le fichier en utilisant le pointeur avec la
fonction fread()
qui renvoie le nombre de caractères désirés du fichier. Pour
lire le fichier en entier, le nombre de caractères est la taille du
fichier, donnée par la fonction filesize().
- fermer le fichier avec la fonction fclose()
qui va aussi libérer le pointeur de ressource.
Lire un fichier ligne par ligne
Pour lire un fichier
séquentiellement, ligne par ligne, on réalisera les opérations
suivantes :
- ouvrir le fichier avec la fonction fopen()
qui renvoie un pointeur sur la ressource (le fichier physique), ou
FALSE si le fichier ne peut pas être ouvert (pas les permissions,
mauvais nom, etc.). La fonction accepte comme premier argument le
nom du fichier à ouvrir et comme second argument le type
d'opération à effectuer, ici r pour read.
- dans une boucle lire une ligne en utilisant le
pointeur avec la fonction fgets()
qui renvoie une ligne du fichier.
- la fin de boucle est définie avec la fonction feof()
qui teste la fin de fichier.
- fermer le fichier avec la fonction fclose()
qui va aussi libérer le pointeur de ressource.
Si le fichier contenait des enregistrements de longueur fixe,
nous pourrions utiliser la fonction fread()à
la place de fgets().
Pour un fichier dont les enregistrements seraient tous de 120
caractères, nous aurions le code suivant :
// Boucle de lecture
while (! feof($fichier) ) {
// Lecture d'une ligne
$enreg = fread($fichier, 120);
... traitement ...
}