J'ai rien contre de faire successivement fopen/fwrite/fclose, cependant quelques précisions pourraient être utiles.
=> parceque file_get_contents() genere une erreur si le fichier n'existe pas
=> et que l'option "a" de fopen() permet de placer le curseur a la fin de fichier... si le fichier de log fait 10 000 lignes... ca va etre lourd de le recuperer pour le re-ecrire + 1 ligne
Dans la doc de Php il est dit ceci concernant : file_put_contents()
Revient à appeler les fonctions fopen(), fwrite() et fclose() successivement.
Aussi, cette fonction accepte un flag en 3ème paramètre qui permet d'obtenir le même comportement.
FILE_APPEND : Si le fichier filename existe déjà, cette option permet d'ajouter les données au fichier au lieu de l'écraser.
Concernant la fonction error_log(), elle accepte en 3ème paramètre un flag (de 0 à 4) permettant de d'indiquer qu'il faudra tenir compte de la destination indiquée en 4ème paramètre.
Donc certes par défaut l'écriture aura lieu dans le fichier de log de Php, mais on peu aussi le faire là où on le souhaite de manière ponctuelle, comme ici pour un fichier journal.
Si le fichier n'existe pas, il est créé.
Suffit de faire :
error_log("Un message", 3, "un/autre/fichier/journal.txt");
Mais encore, il est dit ceci pour la fonction fopen() :
Erreurs / Exceptions
Si l'ouverture échoue, une alerte E_WARNING sera générée.
Un fopen peu poser problème aussi. 
Pour ma part les 3 solutions sont valables, de même que dans tous les cas il serait bon de mettre un try/catch (ou un @ pas très zen) pour gérer en cas d'erreur.
Mise à part tout ça, j'ai essayé le code, et je n'ai pas remarqué de triple écriture.
Ton problème viendrait ailleurs que dans cette méthode log().
As tu essayé de supprimer (ou commenter) petit à petit du code pour tenter de voir lequel provoquerait ce phénomène là ?
Ou l'inverse, de partir sur quelque chose de fonctionnel (1 seule écriture) et réintégrer petit à petit les codes.
Il y a surement un élément extérieur perturbateur, mais je ne vois pas lequel malheureusement.
Partager