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 :
$stream: Le pointeur de fichier que vous souhaitez fermer. Il doit s'agir d'une ressource valide et ouverte retournée parfopen(),fsockopen(),popen(), ou une fonction similaire. Passer une ressource invalide ou déjà fermée déclenche uneTypeError(PHP 8+) ou un avertissement (PHP 7), et la fonction retournefalse.
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 ; appelerfread(),fwrite()oufclose()dessus à nouveau échoue. - Un
fclose()parfopen(). 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. Utilisezunlink()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 quefclose()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.