file()
La fonction file() de PHP lit le contenu d'un fichier et le stocke dans un array. Idéale pour traiter un fichier ligne par ligne en un seul appel.
Qu'est-ce que la fonction file() ?
La fonction file() lit l'intégralité d'un fichier dans un array, où chaque élément est une ligne du fichier. C'est le moyen le plus rapide d'obtenir les lignes d'un fichier dans un array PHP en un seul appel — vous n'avez pas besoin d'ouvrir un handle, de boucler avec fgets(), ni de fermer quoi que ce soit ensuite.
Utilisez file() lorsque vous souhaitez traiter un fichier ligne par ligne : compter les lignes, filtrer des enregistrements, lire une liste de valeurs ou analyser un petit journal. Pour obtenir une grande chaîne au lieu d'un array, utilisez file_get_contents() ; pour écrire dans un fichier en un seul appel, utilisez file_put_contents().
Syntaxe
file(string $filename, int $flags = 0, ?resource $context = null): array|false| Paramètre | Description |
|---|---|
$filename | Chemin vers le fichier à lire. Peut être un chemin local ou une URL (si allow_url_fopen est activé). |
$flags | Facultatif. Un ou plusieurs drapeaux, combinés avec l'opérateur OR bit à bit (|). Voir le tableau ci-dessous. |
$context | Facultatif. Une ressource de contexte de flux créée avec stream_context_create(). |
Valeur de retour : un array de lignes, ou false en cas d'échec (par exemple, si le fichier n'existe pas). Par défaut, chaque ligne conserve son saut de ligne final (\n).
Le paramètre flags
$flags vous permet de contrôler la manière dont les lignes sont lues. Combinez-les avec | :
| Drapeau | Effet |
|---|---|
FILE_IGNORE_NEW_LINES | Supprime le caractère de saut de ligne à la fin de chaque ligne. |
FILE_SKIP_EMPTY_LINES | Ignore les lignes vides (le plus utile avec FILE_IGNORE_NEW_LINES). |
FILE_USE_INCLUDE_PATH | Recherche le fichier également dans l'include_path. |
<?php
// Lines without trailing "\n", and no blank lines.
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);Comment utiliser la fonction file()
Un exemple autonome qui crée un fichier, le relit avec file() et parcourt les lignes :
<?php
// Create a small file to read.
file_put_contents('myfile.txt', "First line\nSecond line\nThird line\n");
$lines = file('myfile.txt');
foreach ($lines as $lineNumber => $line) {
echo "Line #{$lineNumber}: " . trim($line) . "\n";
}Cela affiche :
Line #0: First line
Line #1: Second line
Line #2: Third lineLes clés du array sont des numéros de ligne à base zéro, et les valeurs sont le contenu des lignes. Nous utilisons trim() ici pour supprimer le saut de ligne final que file() conserve par défaut — passer FILE_IGNORE_NEW_LINES produirait le même résultat au moment de la lecture.
Compter les lignes d'un fichier
Puisque file() retourne un array, count() vous donne directement le nombre de lignes :
<?php
file_put_contents('myfile.txt', "alpha\nbeta\ngamma\n");
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES);
echo "The file has " . count($lines) . " lines.\n"; // The file has 3 lines.Gestion des erreurs
Lorsque le fichier ne peut pas être lu, file() retourne false et émet un avertissement. Vérifiez toujours le résultat avant de boucler :
<?php
$lines = @file('does-not-exist.txt');
if ($lines === false) {
echo "Could not read the file.\n";
} else {
echo "Read " . count($lines) . " lines.\n";
}L'opérateur @ supprime l'avertissement intégré afin que vous puissiez gérer l'échec vous-même.
Points d'attention
- Fichier entier en mémoire.
file()charge chaque ligne dans un array en une seule fois. Pour les très grands fichiers, ouvrez un handle avecfopen()et lisez ligne par ligne avecfgets()à la place. - Les sauts de ligne finaux sont conservés sauf si vous passez
FILE_IGNORE_NEW_LINES. Cela pose problème pour les comparaisons exactes de chaînes, par ex.$lines[0] === 'value'échoue quand l'élément est en réalité"value\n". - Vérifiez l'existence d'abord si vous souhaitez éviter les avertissements : combinez avec
file_exists()ou supprimez avec@.
Conclusion
La fonction file() est le moyen le plus simple de lire un fichier dans un array de lignes en PHP. Utilisez les drapeaux FILE_IGNORE_NEW_LINES et FILE_SKIP_EMPTY_LINES pour obtenir des lignes propres, vérifiez toujours qu'une valeur false n'est pas retournée, et préférez fgets() pour les fichiers trop volumineux à charger en mémoire.