W3docs

Système de fichiers PHP

Découvrez les fonctions du système de fichiers PHP pour créer, lire, écrire et supprimer des fichiers et des répertoires.

Introduction

Les fonctions du système de fichiers PHP permettent à vos scripts de lire et d'écrire sur le disque du serveur : créer, lire, mettre à jour et supprimer des fichiers, et gérer des répertoires. Elles constituent la base de tout ce qui doit conserver des données en dehors d'une base de données — fichiers journaux, rapports générés, fichiers téléchargés par les utilisateurs, configuration, caches et tâches d'import/export.

Cet article explique les deux principales façons de travailler avec des fichiers (la famille basée sur les handles construite autour de fopen(), et les helpers en une seule opération comme file_get_contents()), présente des exemples fonctionnels pour chacune, et signale les pièges liés aux permissions et à la gestion des erreurs qui posent problème en production.

Deux façons de travailler avec les fichiers

PHP vous offre deux styles, et choisir le bon maintient votre code simple :

  1. Helpers en une seule opérationfile_get_contents() et file_put_contents() lisent ou écrivent un fichier entier en un seul appel. Utilisez-les quand le fichier tient confortablement en mémoire (fichiers de configuration, petits JSON/CSV, templates). Ce sont les options les plus courtes et les plus lisibles.
  2. Fonctions basées sur les handlesfopen(), fread(), fwrite(), et fclose() vous donnent un handle de fichier (une ressource) que vous lisez ou écrivez de manière incrémentale. Utilisez-les pour les grands fichiers que vous souhaitez diffuser ligne par ligne sans tout charger en mémoire, ou lorsque vous devez garder un fichier ouvert à travers plusieurs opérations.

Opérations sur les fichiers

PHP fournit plusieurs fonctions pour travailler avec des fichiers. Ces fonctions vous permettent de créer, ouvrir, lire, écrire et supprimer des fichiers. Les fonctions de fichiers les plus couramment utilisées comprennent :

  • fopen() : Ouvre un fichier et retourne un handle. Elle prend deux arguments : le nom du fichier et le mode dans lequel l'ouvrir (voir le tableau ci-dessous).
  • fclose() : Ferme un handle de fichier ouvert et vide les écritures en mémoire tampon sur le disque.
  • fwrite() : Écrit une string dans un fichier ouvert, retournant le nombre d'octets écrits.
  • fread() : Lit un nombre donné d'octets depuis un fichier ouvert.
  • feof() : Retourne true une fois la fin du fichier atteinte — utile comme condition de boucle lors de la lecture.
  • unlink() : Supprime un fichier.
  • filesize() : Retourne la taille d'un fichier en octets.
  • file_exists() : Vérifie si un fichier ou un répertoire existe avant d'agir dessus.

Pour les tâches simples de lecture/écriture, privilégiez file_get_contents() et file_put_contents(), qui gèrent l'ouverture, la lecture/écriture et la fermeture en un seul appel.

Modes de fichier pour fopen()

Le deuxième argument de fopen() contrôle ce que vous pouvez faire avec le handle et ce qui arrive au contenu existant. Les modes les plus courants sont :

ModeSignification
"r"Lecture seule. Le pointeur commence au début. Échoue si le fichier n'existe pas.
"w"Écriture seule. Tronque le fichier à zéro octet (ou le crée).
"a"Écriture seule, ajout. Crée le fichier s'il est absent ; le contenu existant est préservé.
"x"Écriture seule, mais échoue si le fichier existe déjà — mode de création sûr.
"r+"Lecture et écriture. Pointeur au début ; le fichier doit exister.

Attention : "w" supprime le contenu existant au moment où vous ouvrez le fichier. Si vous souhaitez ajouter à un journal au lieu de l'écraser, utilisez "a".

Opérations sur les répertoires

PHP fournit également des fonctions pour travailler avec des répertoires. Ces fonctions vous permettent de créer, supprimer et manipuler des répertoires. Parmi les fonctions de répertoire les plus couramment utilisées :

  • mkdir() : Cette fonction est utilisée pour créer un répertoire.
  • rmdir() : Cette fonction est utilisée pour supprimer un répertoire.
  • opendir() : Cette fonction est utilisée pour ouvrir un répertoire.
  • readdir() : Cette fonction est utilisée pour lire le contenu d'un répertoire.
  • closedir() : Cette fonction est utilisée pour fermer un répertoire ouvert.

Exemples

Voyons comment ces fonctions sont utilisées en pratique.

Créer et écrire dans un fichier

Pour créer un fichier et y écrire, ouvrez-le en mode écriture avec fopen(), écrivez avec fwrite(), puis fermez toujours avec fclose() :

<?php

$file = fopen("example.txt", "w");
if ($file === false) {
    exit("Error opening file");
}
fwrite($file, "Hello, world!");
fclose($file);

Cela crée example.txt dans le même répertoire que le script (en le remplaçant s'il existe déjà), écrit Hello, world!, et ferme le handle.

La même tâche avec le helper en une seule opération tient en une ligne — c'est le style préféré pour les petits fichiers :

<?php

file_put_contents("example.txt", "Hello, world!");

Lire un fichier

Pour lire un fichier avec un handle, ouvrez-le en mode lecture et utilisez fread(). Passer filesize() indique à fread() combien d'octets lire :

<?php

$file = fopen("example.txt", "r");
if ($file === false) {
    exit("Error opening file");
}
echo fread($file, filesize("example.txt"));
fclose($file);

Pour les petits fichiers, file_get_contents() fait la même chose en un seul appel :

<?php

echo file_get_contents("example.txt");

Lire un fichier ligne par ligne

Pour les grands fichiers, lisez ligne par ligne avec fgets() afin de ne jamais charger le fichier entier en mémoire. La boucle s'exécute jusqu'à ce que feof() signale la fin du fichier :

<?php

$file = fopen("example.txt", "r");
if ($file === false) {
    exit("Error opening file");
}
while (!feof($file)) {
    $line = fgets($file);
    echo $line;
}
fclose($file);

Ajouter du contenu à un fichier

Pour ajouter à un fichier sans effacer ce qui s'y trouve déjà, ouvrez-le en mode ajout ("a"). C'est le bon mode pour les journaux :

<?php

$file = fopen("log.txt", "a");
fwrite($file, "New log entry\n");
fclose($file);

Créer un répertoire

Pour créer un répertoire, utilisez la fonction mkdir() :

<?php

mkdir("example_directory");

Cela crée un répertoire appelé example_directory à côté du script. Pour créer des répertoires imbriqués en un seul appel, passez le mode et l'indicateur récursif :

<?php

mkdir("parent/child/grandchild", 0755, true);

Remarque : mkdir() requiert une permission d'écriture sur le répertoire parent. Le troisième argument (true) active la création récursive des répertoires intermédiaires.

Supprimer un fichier

Pour supprimer un fichier, utilisez la fonction unlink() :

<?php

if (file_exists("example.txt")) {
    unlink("example.txt");
}

Vérifier avec file_exists() en premier évite un avertissement lorsque le fichier a déjà été supprimé.

Bonnes pratiques

  • Fermez toujours les handles. Chaque fopen() doit être associé à un fclose() pour que les écritures en mémoire tampon soient vidées et la ressource libérée.
  • Vérifiez les valeurs de retour. fopen(), mkdir(), et unlink() retournent false en cas d'échec — protégez-vous contre cela au lieu de supposer le succès.
  • Faites attention aux permissions. La plupart des erreurs "permission refusée" viennent du fait que l'utilisateur du serveur web ne possède pas le répertoire cible, et non de votre code.
  • Choisissez le bon outil. Utilisez file_get_contents() / file_put_contents() pour les opérations sur des fichiers entiers ; utilisez la famille fopen()/fread() uniquement lorsque vous avez besoin de diffusion en continu.

Conclusion

Les fonctions du système de fichiers constituent la base de la gestion des fichiers et des répertoires en PHP. En comprenant la différence entre les helpers en une seule opération et la diffusion basée sur les handles, en choisissant le bon mode fopen(), et en nettoyant les handles de manière sûre, vous pouvez créer des applications robustes qui stockent les données et la configuration de manière fiable. Pour aller plus loin, explorez PHP File Handling, PHP File Open/Read, et travailler avec les répertoires.

Pratique

Pratique
Quelles fonctions peuvent être utilisées en PHP pour gérer les fichiers et les répertoires ?
Quelles fonctions peuvent être utilisées en PHP pour gérer les fichiers et les répertoires ?
Was this page helpful?