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.

Exemple : lire un fichier avec file()
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Lire un fichier avec file'); $nom = 'test_fichiers/commentaires.txt'; if (! is_file($nom)) { htmlInfo("$nom n'est pas un fichier"); htmlFin(); exit(); } // Lecture $enregs = file($nom); // Affichage des enregistrements $iMax = count($enregs); for ($i = 0; $i < $iMax; $i++) { htmlInfo("Enregistrement $i"); echo $enregs[$i]; } htmlFin(); ?>

Pour extraire les différents champs d'un enregistrement, nous pouvons utiliser la fonction explode() avec le caractère | comme délimiteur.

Exemple : lire un fichier avec file()
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Lire un fichier avec file'); $nom = 'test_fichiers/commentaires.txt'; if (! is_file($nom)) { htmlInfo("$nom n'est pas un fichier"); htmlFin(); exit(); } // Lecture $enregs = file($nom); // Affichage des enregistrements $iMax = count($enregs); for ($i = 0; $i < $iMax; $i++) { htmlInfo("Enregistrement $i"); foreach (explode('|', $enregs[$i]) as $champ) { echo '<br>Champ : ', $champ; } } htmlFin(); ?>

### 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.

Exemple : lire un fichier avec fread
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Lire un fichier avec fread'); $nom = 'test_fichiers/commentaires.txt'; if (! is_file($nom)) { htmlInfo("$nom n'est pas un fichier"); htmlFin(); exit(); } // Ouverture, lecture, fermeture du fichier $fichier = fopen($nom, 'r'); $buffer = fread($fichier, filesize($nom)); fclose($fichier); // Affichage des enregistrements $enregs = explode("\n", $buffer); $iMax = count($enregs); for ($i = 0; $i < $iMax; $i++) { htmlInfo("Enregistrement $i"); foreach (explode('|', $enregs[$i]) as $champ) { echo '<br>Champ : ', $champ; } } htmlFin(); ?>

### 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.

Exemple : lire un fichier ligne par ligne
<?php ob_start(); require('bib_fonctions.php'); htmlDebut('Lire un fichier séquentiellement'); $nom = 'test_fichiers/commentaires.txt'; if (! is_file($nom)) { htmlInfo("$nom n'est pas un fichier"); htmlFin(); exit(); } // Ouverture du fichier $fichier = fopen($nom,'r'); // Boucle de lecture while (! feof($fichier) ) { // Lecture d'une ligne $enreg = fgets($fichier); htmlInfo('Enregistrement'); foreach (explode('|', $enreg) as $champ) { echo '<br>Champ : ', $champ; } } // Fermeture du fichier fclose($fichier); htmlFin(); ?>

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 ...
    }