W3docs

fclose()

La fonction fclose() en PHP ferme un pointeur de fichier ouvert. Essentielle pour gérer les ressources fichier et garantir l'écriture des données.

Introduction à la fonction PHP fclose()

La fonction fclose() ferme un pointeur de fichier précédemment ouvert avec fopen(). Un pointeur de fichier (aussi appelé handle ou ressource de flux) est la valeur que PHP vous fournit lors de l'ouverture d'un fichier ; chaque opération de lecture et d'écriture l'utilise pour suivre votre position courante dans le fichier.

Fermer un handle une fois que vous avez terminé est important pour deux raisons :

  • Il vide le tampon d'écriture. PHP et le système d'exploitation n'écrivent pas nécessairement chaque octet sur le disque immédiatement — ils conservent les données dans un tampon pour des raisons de performance. fclose() force l'écriture des données en attente, de sorte qu'un fichier oublié non fermé peut se retrouver sans ses derniers octets.
  • Il libère les ressources système. Chaque fichier ouvert consomme un descripteur de fichier au niveau du système d'exploitation. Un script de longue durée (ou une boucle qui ouvre des fichiers sans les fermer) peut épuiser la limite des descripteurs et commencer à échouer avec l'erreur « Too many open files ».

PHP ferme automatiquement tout handle encore ouvert à la fin du script, donc vous perdrez rarement des données dans un script court. Mais vous devriez tout de même fermer les handles explicitement — en particulier dans les boucles et les processus de longue durée — afin que les ressources soient libérées le plus tôt possible.

Syntaxe

fclose(resource $stream): bool
  • $stream — le pointeur de fichier ouvert que vous souhaitez fermer.

Paramètres

La fonction fclose() prend un paramètre obligatoire :

  1. $stream : Le pointeur de fichier que vous souhaitez fermer. Il doit s'agir d'une ressource valide et ouverte retournée par fopen(), fsockopen(), popen(), ou une fonction similaire. Passer une ressource invalide ou déjà fermée déclenche une TypeError (PHP 8+) ou un avertissement (PHP 7), et la fonction retourne false.

Valeurs de retour

Retourne true en cas de succès ou false en cas d'échec.

Exemples

Exemple 1 : Ouvrir, écrire et fermer un fichier

Le schéma le plus courant consiste à ouvrir un fichier, travailler avec lui, puis le fermer. La fermeture vide le texte en mémoire tampon sur le disque :

Écrire dans un fichier et fermer le handle

<?php

$handle = fopen("notes.txt", "w");   // open for writing (creates/empties the file)
fwrite($handle, "Hello, fclose!\n");
fclose($handle);                      // flush + release the handle

echo "File written and closed.";

Résultat :

File written and closed.

Exemple 2 : Toujours vérifier que le fichier est bien ouvert

fopen() retourne false si le fichier ne peut pas être ouvert (fichier manquant, pas de permission). Fermer false est une erreur, donc vérifiez d'abord le handle :

Se prémunir contre une ouverture échouée

<?php

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

if ($handle === false) {
    echo "Could not open the file.";
} else {
    // ... read from the file ...
    fclose($handle);
    echo "Done.";
}

Exemple 3 : Fermer à l'intérieur d'une boucle

Lorsque vous traitez de nombreux fichiers, fermez chaque handle dès que vous avez terminé pour éviter l'accumulation de descripteurs :

Fermer chaque handle à l'intérieur de la boucle

<?php

$files = ["a.txt", "b.txt", "c.txt"];

foreach ($files as $name) {
    $handle = fopen($name, "r");
    if ($handle !== false) {
        // ... process the file ...
        fclose($handle);   // closed before the next iteration opens another
    }
}

Exemple 4 : Vérifier la valeur de retour

Dans le code où un échec de fermeture est important (par exemple, lors d'une écriture dans un flux réseau), examinez la valeur de retour :

Gérer un échec de fermeture

<?php

$handle = fopen("report.txt", "w");
fwrite($handle, "Generated report\n");

if (fclose($handle) === false) {
    echo "Failed to close the file — data may not have been saved.";
} else {
    echo "File saved successfully.";
}

Pièges courants

  • N'utilisez pas un handle après l'avoir fermé. Une fois que fclose() est exécuté, la ressource est invalide ; appeler fread(), fwrite() ou fclose() dessus à nouveau échoue.
  • Un fclose() par fopen(). Fermer le même handle deux fois déclenche une erreur au deuxième appel.
  • fclose() ne supprime pas le fichier. Il libère uniquement le pointeur. Utilisez unlink() pour supprimer un fichier du disque.
  • Fermeture automatique ≠ gratuite. Se fier à la fermeture automatique de PHP en fin de script convient pour de petits scripts, mais une boucle qui ouvre sans fermer peut atteindre la limite des descripteurs de fichier du système d'exploitation bien avant la fin du script.

Fonctions connexes

  • fopen() — ouvre un fichier et retourne le handle que fclose() fermera ensuite.
  • fwrite() — écrit des données dans un handle ouvert.
  • fread() / fgets() — lit depuis un handle ouvert.
  • feof() — teste si vous avez atteint la fin du fichier.
  • PHP File Handling — vue d'ensemble du travail avec les fichiers.

Conclusion

fclose() ferme un pointeur de fichier ouvert, vide les écritures en mémoire tampon et libère la ressource système sous-jacente. Bien que PHP ferme les handles automatiquement à la fin d'un script, les fermer explicitement — en particulier dans les boucles et les scripts de longue durée — évite l'épuisement des descripteurs de fichier et garantit que vos données sont bien écrites sur le disque. Associez chaque fopen() à un fclose(), et vérifiez toujours qu'une ouverture a réussi avant de lire, écrire ou fermer.

Pratique

Pratique
Quel est le rôle de la fonction fclose() en PHP ?
Quel est le rôle de la fonction fclose() en PHP ?
Was this page helpful?