W3docs

Introduction à la création et à la manipulation de fichiers PHP

Apprenez à créer et écrire des fichiers en PHP avec fopen(), fwrite(), fclose() et file_put_contents(). Modes d'ouverture, gestion des erreurs.

PHP s'exécute côté serveur, ce qui lui permet de lire et d'écrire de vrais fichiers sur le disque — rapports générés, HTML mis en cache, entrées de journal, CSV exportés, contenu uploadé par les utilisateurs et configuration. Ce chapitre couvre le flux de travail principal pour créer et écrire des fichiers : ouvrir un descripteur de fichier avec le bon mode, écrire des données, et fermer le descripteur. Il explique également quand utiliser les helpers plus simples en une seule ligne.

Il existe deux familles d'outils d'écriture de fichiers en PHP :

  • Descripteurs de fluxfopen() / fwrite() / fclose(). Idéaux lorsque vous écrivez de façon incrémentale (ajout de lignes de journal, diffusion de grandes sorties) et souhaitez un contrôle fin sur le mode du fichier.
  • Helpers tout-en-unfile_put_contents(). Idéaux lorsque vous avez toute la chaîne en mémoire et souhaitez simplement la vider dans un fichier en un seul appel.

Nous utiliserons d'abord l'approche par flux, car comprendre les modes est la clé de tout le reste.

Créer et écrire un fichier avec fopen()

Pour écrire dans un fichier, vous devez d'abord l'ouvrir avec fopen(). Cette fonction prend le chemin du fichier et une chaîne de mode, et renvoie un descripteur de fichier (une ressource) sur lequel opèrent les autres fonctions :

<?php
$file = fopen("example.txt", "w");   // open for writing, truncating the file
fwrite($file, "This is an example.\n");
fclose($file);                       // always close the handle

Ce que fait chaque ligne :

  • fopen("example.txt", "w") ouvre example.txt en mode écriture. Si le fichier n'existe pas, il est créé ; s'il existe déjà, son contenu est effacé (tronqué à zéro octet).
  • fwrite() écrit la chaîne dans le fichier et renvoie le nombre d'octets écrits (ou false en cas d'échec).
  • fclose() vide les données mises en tampon et libère le descripteur. L'omettre peut laisser des données non écrites jusqu'à la fin du script.

Un chemin relatif comme "example.txt" est résolu par rapport au répertoire de travail courant du script. Pour plus de sécurité et de prévisibilité, préférez un chemin absolu, par exemple __DIR__ . "/example.txt".

Modes de fichier

Le mode passé à fopen() détermine si le fichier est créé, tronqué ou complété, et si vous pouvez le lire. Voici les modes qui comptent pour créer et écrire :

ModeSignificationCrée le fichier ?Contenu existantPointeur démarre à
"w"Écriture seuleOuiEffacéDébut
"w+"Lecture + écritureOuiEffacéDébut
"a"Ajout seulOuiConservéFin
"a+"Lecture + ajoutOuiConservéFin
"x"Écriture seule, échoue si le fichier existeOui (seulement si nouveau)Début
"x+"Lecture + écriture, échoue si existeOui (seulement si nouveau)Début

Utilisez "x" lorsque vous ne devez pas écraser un fichier existant — par exemple pour écrire un fichier de verrouillage. Utilisez "a" pour les journaux, où chaque exécution doit ajouter au fichier plutôt que l'effacer.

Ajouter au lieu d'écraser

Une erreur très courante est d'utiliser "w" pour un journal et de se demander pourquoi le fichier ne contient jamais qu'une seule ligne. Ouvrez avec "a" pour conserver le contenu précédent et ajouter à la fin :

<?php
$log = fopen("app.log", "a");        // append mode — never erases
fwrite($log, "[" . date("Y-m-d H:i:s") . "] User logged in\n");
fclose($log);

Exécutez ceci deux fois et le fichier contiendra deux lignes horodatées au lieu d'une.

Le raccourci : file_put_contents()

Lorsque vous disposez déjà du contenu complet sous forme de chaîne, file_put_contents() effectue l'ouverture, l'écriture et la fermeture en un seul appel :

<?php
// Overwrite (or create) the file with this exact content:
file_put_contents("greeting.txt", "Hello, world!\n");

// Append instead of overwriting:
file_put_contents("app.log", "another line\n", FILE_APPEND);

Elle renvoie le nombre d'octets écrits, ou false en cas d'échec. C'est le choix le plus simple pour les petites charges utiles en mémoire. Faites appel à fopen()/fwrite() lorsque vous écrivez dans une boucle ou avez besoin de garder le descripteur ouvert sur plusieurs opérations.

Relire ce que vous avez écrit

Pour confirmer une écriture, ouvrez le fichier en mode lecture ("r") et lisez-le. Le chapitre associé PHP File Open/Read couvre cela en détail, mais la version avec flux est :

<?php
$file = fopen("example.txt", "r");
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;

Ici, fread() lit jusqu'à filesize("example.txt") octets — le fichier entier — dans $contents. Pour une ligne unique, file_get_contents() lit l'intégralité du fichier dans une chaîne sans descripteur à gérer.

Gérer les erreurs et les fichiers manquants

fopen() renvoie false (et émet un avertissement) s'il ne peut pas ouvrir le fichier — permissions insuffisantes, répertoire inexistant ou disque en lecture seule. Vérifiez toujours avant d'écrire :

<?php
$file = fopen("/no/such/dir/example.txt", "w");
if ($file === false) {
    echo "Could not open the file for writing.";
} else {
    fwrite($file, "ok");
    fclose($file);
}

Avant de lire un fichier que vous n'avez pas créé lors de la même exécution, confirmez qu'il existe avec file_exists() pour éviter les avertissements de filesize() ou fread().

Autres fonctions de fichier utiles

Au-delà de la création et de l'écriture, PHP propose une boîte à outils complète pour la gestion des fichiers :

  • file_get_contents() — lire un fichier entier dans une chaîne en un seul appel.
  • file_put_contents() — écrire une chaîne dans un fichier en un seul appel.
  • file_exists() — vérifier si un chemin existe avant d'agir dessus.
  • unlink() — supprimer un fichier.
  • rename() — renommer ou déplacer un fichier.
  • copy() — copier un fichier vers un nouveau chemin.

Pour les fichiers uploadés depuis un formulaire, consultez PHP File Upload, et pour une vue d'ensemble de l'API du système de fichiers, consultez PHP File Handling.

Résumé

  • Ouvrez un fichier avec fopen($path, $mode) ; le mode contrôle le comportement de création/troncature/ajout.
  • Utilisez "w" pour écraser, "a" pour ajouter, et "x" pour refuser d'écraser un fichier existant.
  • fwrite() écrit et fclose() vide et libère le descripteur — fermez toujours.
  • Pour les écritures de chaînes complètes, file_put_contents() est l'alternative concise en un seul appel.
  • Vérifiez la valeur de retour de fopen() et utilisez file_exists() pour écrire un code robuste sans avertissements.

Pratique

Pratique
Quelles fonctions peuvent être utilisées pour écrire dans un fichier en PHP ?
Quelles fonctions peuvent être utilisées pour écrire dans un fichier en PHP ?
Was this page helpful?