W3docs

PHP File Open : Guide pour lire et écrire des fichiers en PHP

Apprenez à ouvrir, lire, écrire et fermer des fichiers en PHP avec fopen(), fread(), fwrite() et les fonctions associées.

Lire et écrire des fichiers est l'une des tâches les plus courantes en programmation côté serveur : vous sauvegardez des documents téléchargés, générez des journaux, mettez des données en cache et lisez des fichiers de configuration. PHP vous offre un ensemble réduit et stable de fonctions pour cela, et elles commencent toutes par un seul appel — fopen(). Ce chapitre explique comment ouvrir un fichier, le lire, y écrire, y ajouter des données, le fermer et gérer les erreurs que vous rencontrerez inévitablement en chemin.

Comprendre la fonction fopen()

La fonction fopen() ouvre un fichier (ou une URL) et retourne un handle de fichier — une ressource que vous passez à toutes les autres fonctions de fichiers. Elle prend deux arguments obligatoires : le chemin vers le fichier et le mode qui détermine ce que vous êtes autorisé à faire avec lui et où commence le pointeur de fichier interne (le curseur qui marque votre position).

$handle = fopen("example.txt", "r");

Si le fichier ne peut pas être ouvert, fopen() retourne false et émet un avertissement, vous devez donc toujours vérifier la valeur de retour avant d'utiliser le handle.

Modes de fichier

Le mode est l'argument le plus important : il contrôle si le fichier est lu, écrasé ou complété, et si un fichier manquant est créé.

ModeLectureÉcriturePointeur démarre àTronque ?Crée si absent ?
rouinondébutnonnon (échoue)
r+ouiouidébutnonnon (échoue)
wnonouidébutouioui
w+ouiouidébutouioui
anonouifinnonoui
a+ouiouifinnonoui
xnonouidébutn/aoui (échoue si existant)
x+ouiouidébutn/aoui (échoue si existant)

Quelques règles importantes à retenir :

  • Utilisez r lorsque le fichier doit déjà exister et que vous n'avez besoin que de le lire.
  • w et w+ effacent le contenu du fichier au moment de son ouverture — ne les utilisez jamais lorsque vous souhaitez conserver les données existantes.
  • a et a+ sont le choix sûr pour les journaux : ils écrivent toujours à la fin et ne tronquent jamais.
  • x et x+ protègent contre l'écrasement accidentel d'un fichier existant, ce qui est utile pour les opérations « créer une seule fois ».

Remarque : sous Windows, ajoutez b au mode (par exemple rb, wb, ab) pour ouvrir le fichier en mode binaire et éviter la conversion des fins de ligne qui peut corrompre les fichiers non textuels. Sous Linux et macOS, le drapeau b est sans effet, donc l'ajouter partout rend votre code portable.

Lire des fichiers en PHP

Pour lire un fichier, ouvrez-le en mode lecture (r) et utilisez fread(). fread() prend le handle de fichier et le nombre d'octets à lire ; l'associer à filesize() lit l'intégralité du fichier en une seule fois.

Voici un exemple qui lit tout le contenu d'un fichier :

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

Lire un fichier ligne par ligne

Pour les fichiers volumineux, charger tout en mémoire est inefficace. Utilisez fgets() pour lire une ligne à la fois et feof() (« fin de fichier ») pour vous arrêter lorsque vous atteignez la fin :

<?php
$file = fopen("example.txt", "r");
if ($file) {
    while (!feof($file)) {
        $line = fgets($file);
        echo $line;
    }
    fclose($file);
}
?>

L'alternative plus courte : file_get_contents()

Pour des lectures simples où vous voulez simplement obtenir le fichier entier sous forme de chaîne, file_get_contents() effectue l'ouverture, la lecture et la fermeture en un seul appel :

<?php
$contents = file_get_contents("example.txt");
echo $contents;
?>

Utilisez fopen() + fread()/fgets() lorsque vous avez besoin d'un contrôle précis (streaming, lectures partielles, verrouillage) ; optez pour file_get_contents() lorsque vous voulez simplement le texte du fichier.

Écrire des fichiers en PHP

Pour écrire dans un fichier, ouvrez-le en mode écriture (w) et utilisez fwrite(). fwrite() prend le handle de fichier et la chaîne à écrire, et retourne le nombre d'octets écrits (ou false en cas d'échec). N'oubliez pas que w tronque d'abord le fichier, il commence donc toujours à partir d'un fichier vide.

Voici un exemple qui écrit des données dans un fichier :

<?php
$file = fopen("example.txt", "w");
if ($file) {
    fwrite($file, "This is some data.");
    fclose($file);
}
?>

Tout comme pour la lecture, il existe un raccourci en un seul appel pour l'écriture : file_put_contents() ouvre, écrit et ferme le fichier en une seule instruction.

Ajouter des données à des fichiers en PHP

Pour ajouter des données à un fichier en PHP, vous pouvez utiliser la fonction fopen() en mode ajout (a) et la fonction fwrite(). Cela vous permet d'ajouter des données à la fin d'un fichier, plutôt que de l'écraser.

Voici un exemple qui ajoute des données à un fichier :

<?php
$file = fopen("example.txt", "a");
if ($file) {
    fwrite($file, "This is some additional data.");
    fclose($file);
}
?>

Fermer des fichiers en PHP

Il est important de fermer un fichier après avoir fini de travailler avec lui, afin de libérer les ressources système et d'éviter la corruption des données. Cela peut être fait à l'aide de la fonction fclose(), qui prend le pointeur de fichier retourné par fopen() comme argument.

Voici un exemple qui illustre la bonne façon de fermer un fichier en PHP :

<?php
$file = fopen("example.txt", "r");
if ($file) {
    // Perform file operations here
    fclose($file);
    echo "File closed successfully.";
}
?>

Gestion des erreurs en PHP

Il est important de gérer correctement les erreurs lors du travail avec des fichiers en PHP. Par exemple, si vous essayez d'ouvrir un fichier qui n'existe pas, ou si vous essayez d'écrire dans un fichier qui n'est pas accessible en écriture, vous recevrez une erreur.

Pour gérer les erreurs, vous pouvez utiliser l'instruction if et la variable $file retournée par fopen(). Si fopen() retourne false, cela signifie qu'une erreur s'est produite. Dans les environnements de production, vous pouvez utiliser l'opérateur de suppression d'erreurs @ ou configurer un gestionnaire d'erreurs personnalisé pour gérer les avertissements sans interrompre la mise en page.

Voici un exemple qui illustre la gestion des erreurs en PHP :

<?php
$file = fopen("example.txt", "r");
if ($file) {
    $contents = fread($file, filesize("example.txt"));
    fclose($file);
    echo $contents;
} else {
    echo "Error: Unable to open file.";
}
?>

Résumé

fopen() est le fondement de la gestion des fichiers en PHP. Le mode que vous choisissez détermine tout : r lit, w écrase, a ajoute, et x crée un fichier uniquement s'il n'existe pas déjà. Lisez avec fread()/fgets(), écrivez avec fwrite(), vérifiez toujours si le handle est valide, et fermez-le avec fclose() lorsque vous avez terminé. Pour des lectures et écritures simples en une seule opération, préférez file_get_contents() et file_put_contents().

Pour aller plus loin, consultez fopen(), fread() et fwrite(), ainsi que les chapitres PHP File Handling et PHP Filesystem.

Pratique

Pratique
Quelles fonctions PHP sont utilisées pour ouvrir ou lire un fichier ?
Quelles fonctions PHP sont utilisées pour ouvrir ou lire un fichier ?
Was this page helpful?