W3docs

Gestion des fichiers en PHP

PHP propose de nombreuses fonctions pour manipuler fichiers et dossiers côté serveur. Découvrez le cycle CRUD complet avec exemples pratiques.

La gestion des fichiers est l'une des tâches les plus courantes en programmation côté serveur : écriture de journaux, génération de rapports, mise en cache de données, importation de fichiers CSV et diffusion de téléchargements en dépendent toutes. PHP dispose d'un riche ensemble de fonctions intégrées pour travailler avec les fichiers, ce qui vous évite généralement d'avoir recours à une bibliothèque externe.

Ce chapitre couvre le cycle de vie complet d'un fichier — créer, lire, mettre à jour et supprimer (CRUD) — et explique quand utiliser chaque approche. En résumé, PHP vous offre deux styles :

  • Fonctions d'aide pour fichiers entiers (file_get_contents(), file_put_contents()) — en une ligne, idéales pour les petits fichiers que vous pouvez charger entièrement en mémoire.
  • Fonctions basées sur les flux (fopen(), fread(), fwrite(), fgets(), fclose()) — vous donnent un handle pour lire ou écrire un grand fichier morceau par morceau sans le charger en totalité.

Savoir lequel utiliser fait la différence entre du code qui fonctionne sur un fichier de configuration de 2 Ko et du code qui survit à un fichier journal de 2 Go.

Modes d'ouverture

Chaque appel basé sur les flux commence par fopen($filename, $mode), et le mode est la partie que les débutants comprennent le moins souvent correctement. Il détermine si le fichier est ouvert en lecture, en écriture ou les deux, si le contenu existant est effacé, et où commence le pointeur interne.

ModeLectureÉcriturePointeurSi le fichier est absentContenu existant
"r"ouinondébutavertissement, retourne falseconservé
"r+"ouiouidébutavertissement, retourne falseconservé
"w"nonouidébutcrééeffacé (tronqué)
"w+"ouiouidébutcrééeffacé (tronqué)
"a"nonouifincrééconservé (ajout)
"a+"ouiouifincrééconservé (ajout)
"x"nonouidébutcréééchoue si le fichier existe déjà

Ajoutez "b" (ex. "rb", "wb") pour un accès sécurisé en mode binaire lors du traitement d'images, de PDF ou de toute donnée non textuelle — cela empêche la conversion des fins de ligne sous Windows.

Créer et écrire un fichier

Pour créer un fichier, ouvrez-le dans un mode d'écriture avec fopen() et écrivez-y avec fwrite(). Fermez toujours le handle avec fclose() une fois terminé — cela vide le tampon sur le disque et libère la ressource.

<?php
$file = fopen("test.txt", "w");   // create/truncate, open for writing
fwrite($file, "Hello World\n");
fwrite($file, "Second line\n");   // each call appends after the previous one
fclose($file);                    // flush to disk and release the handle

L'ouverture avec "w" efface tout contenu existant. Pour ajouter à un fichier sans détruire ce qui s'y trouve déjà, ouvrez-le en mode ajout ("a") :

<?php
$log = fopen("app.log", "a");     // pointer starts at end of file
fwrite($log, "User logged in at " . date("H:i:s") . "\n");
fclose($log);

Pour une solution rapide en une ligne lorsque vous avez toute la chaîne en mémoire, ignorez le handle et utilisez file_put_contents() :

<?php
file_put_contents("test.txt", "Hello World\n");          // overwrite
file_put_contents("app.log", "another line\n", FILE_APPEND); // append

Vérifiez toujours la valeur de retour de fopen(). Si le chemin est incorrect ou si le répertoire n'est pas accessible en écriture, la fonction retourne false et PHP émet un avertissement — utiliser false comme handle échouera alors silencieusement.

<?php
$file = fopen("/protected/test.txt", "w");
if ($file === false) {
    die("Could not open the file for writing.");
}
fwrite($file, "data");
fclose($file);

Lire un fichier

La façon la plus simple de lire un petit fichier est file_get_contents(), qui retourne l'intégralité du contenu sous forme de chaîne :

<?php
$content = file_get_contents("test.txt");
echo $content;          // prints everything in the file

Lorsque le fichier est volumineux, le charger entièrement en mémoire est coûteux. Lisez-le ligne par ligne avec fgets(), en bouclant jusqu'à ce que feof() (fin de fichier) soit atteint :

<?php
$file = fopen("test.txt", "r");
while (!feof($file)) {
    $line = fgets($file);   // reads one line, including the newline
    echo $line;
}
fclose($file);

Si vous souhaitez obtenir chaque ligne comme élément d'un tableau en un seul appel, file() est pratique — mais, comme file_get_contents(), elle charge l'intégralité du fichier en mémoire :

<?php
$lines = file("test.txt");          // array, one element per line
echo "This file has " . count($lines) . " lines.";

Une bonne habitude est de vérifier qu'un fichier existe avant de le lire, en utilisant file_exists() (ou is_readable() pour vérifier également les permissions) :

<?php
if (file_exists("test.txt")) {
    echo file_get_contents("test.txt");
} else {
    echo "File not found.";
}

Mettre à jour un fichier

Pour remplacer le contenu d'un fichier, l'outil le plus simple est file_put_contents(). Il ouvre, écrit et ferme en un seul appel :

<?php
$content = "Hello World Again\n";
file_put_contents("test.txt", $content);   // replaces the old contents

Pour ajouter à un fichier plutôt que de le remplacer, passez le drapeau FILE_APPEND (montré ci-dessus) ou ouvrez-le en mode ajout avec fopen(). Il n'existe pas de fonction unique pour « modifier la ligne 3 » — pour modifier une partie d'un fichier, vous devez généralement le lire, modifier les données en PHP, puis le réécrire.

Supprimer un fichier

Utilisez unlink() — notez le nom inhabituel — pour supprimer un fichier. Elle retourne true en cas de succès et false en cas d'échec ; protégez-la avec file_exists() pour éviter un avertissement :

<?php
if (file_exists("test.txt")) {
    if (unlink("test.txt")) {
        echo "File deleted.";
    } else {
        echo "Could not delete the file.";
    }
} else {
    echo "Nothing to delete.";
}

unlink() ne supprime que des fichiers. Pour supprimer un répertoire vide, utilisez rmdir() ; consultez PHP Directory pour travailler avec les dossiers.

Quelle approche choisir

  • Petits fichiers texte/config, contenu entier en une foisfile_get_contents() / file_put_contents().
  • Grands fichiers, lecture en flux ligne par lignefopen() + fgets() / fread().
  • Ajout à un journal → mode "a", ou FILE_APPEND.
  • Créer un fichier uniquement s'il n'existe pas encore → mode "x".
  • Données binaires (images, PDF) → ajoutez le drapeau "b" et utilisez fread()/fwrite().

Résumé

La gestion des fichiers est une partie essentielle de PHP côté serveur. Vous avez découvert les deux familles de fonctions — les fonctions d'aide pour fichiers entiers en une ligne et les fonctions de gestion par handle basées sur les flux — ainsi que le cas d'usage de chacune, comment les modes de fichier contrôlent la troncature et l'ajout, comment lire efficacement de grands fichiers avec fgets()/feof(), et comment mettre à jour et supprimer des fichiers en toute sécurité.

Pour aller plus loin, explorez les chapitres dédiés : Créer et écrire un fichier, Ouvrir et lire un fichier, Fonctions du système de fichiers PHP, Téléchargement de fichiers et PHP Directory.

Pratique

Pratique
Quelles sont les façons correctes d'ouvrir un fichier en PHP ?
Quelles sont les façons correctes d'ouvrir un fichier en PHP ?
Was this page helpful?