J'ai un site Web qui, chaque fois qu'un utilisateur se connecte ou se déconnecte, je l'enregistre dans un fichier texte.
Mon code ne fonctionne pas pour ajouter des données ou créer un fichier texte s'il n'existe pas. Voici l'exemple de code
$myfile = fopen("logs.txt", "wr") or die("Unable to open file!");
$txt = "user id date";
fwrite($myfile, $txt);
fclose($myfile);
Il semble qu'il ne s'ajoute pas à la ligne suivante après que je l'ai rouvert.
Je pense également qu'il y aurait également une erreur dans une situation où 2 utilisateurs se connectent en même temps, cela affecterait-il l'ouverture du fichier texte et son enregistrement par la suite?
logs.txt
et y ajoute le contenuUtilisez le
a
mode. Cela signifieappend
.la source
a
drapeau créera le fichier s'il n'existe pas et veillera quoi qu'il en soit à ce que vous ayez vraiment duappend
nouveau texte. Pour le\n
cela fonctionne mais seulement si entre guillemets doubles et"
non guillemets simples'
Vous pouvez le faire de la manière OO, juste une alternative et flexible:
Ensuite, utilisez-le comme ceci .. disons que vous avez
user_name
stocké dans une session (semi pseudo code):Vérifiez votre journal avec ceci:
Le résultat est comme:
github.com/thielicious/Logger
la source
la source
Essayez ce code:
Je l'utilise toujours comme ça, et ça marche ...
la source
(!file_exists($logPath)) ? 'w':'a'
- l'a
option a déjà le bon comportement lorsque le fichier n'existe pas. Vous pouvez donc simplifier cette réponse en supprimant la ligne$mode = ...;
et en remplaçant la ligne suivante par$logfile = fopen($logPath, 'a');
.Il n'y a pas de mode d'ouverture de fichier tel que "wr" dans votre code:
Les modes d'ouverture des fichiers en PHP http://php.net/manual/en/function.fopen.php sont les mêmes qu'en C: http://www.cplusplus.com/reference/cstdio/fopen/
Il existe les principaux modes ouverts suivants "r" pour la lecture, "w" pour l'écriture et "a" pour l'ajout, et vous ne pouvez pas les combiner. Vous pouvez ajouter d'autres modificateurs comme "+" pour la mise à jour, "b" pour le binaire. Le nouveau standard C ajoute un nouveau sous-spécificateur standard ("x"), pris en charge par PHP, qui peut être ajouté à n'importe quel spécificateur "w" (pour former "wx", "wbx", "w + x" ou "w + bx "/" wb + x "). Ce sous-spécificateur force la fonction à échouer si le fichier existe, au lieu de l'écraser.
En plus de cela, dans PHP 5.2.6, le mode d'ouverture principal «c» a été ajouté. Vous ne pouvez pas combiner «c» avec «a», «r», «w». Le «c» ouvre le fichier pour l'écriture uniquement. Si le fichier n'existe pas, il est créé. S'il existe, il n'est ni tronqué (contrairement à «w»), ni l'appel à cette fonction échoue (comme c'est le cas avec «x»). 'c +' Ouvre le fichier pour lecture et écriture; sinon, il a le même comportement que «c».
De plus, et dans PHP 7.1.2, l'option «e» a été ajoutée et peut être combinée avec d'autres modes. Il définit l'indicateur de fermeture à l'exécution sur le descripteur de fichier ouvert. Uniquement disponible en PHP compilé sur les systèmes conformes POSIX.1-2008.
Ainsi, pour la tâche telle que vous l'avez décrite, le meilleur mode d'ouverture de fichier serait «a». Il ouvre le fichier pour l'écriture uniquement. Il place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, il tente de le créer. Dans ce mode, fseek () n'a aucun effet, les écritures sont toujours ajoutées.
Voici ce dont vous avez besoin, comme cela a déjà été souligné ci-dessus:
la source
Bien qu'il existe de nombreuses façons de le faire. Mais si vous souhaitez le faire de manière simple et que vous souhaitez formater le texte avant de l'écrire dans le fichier journal. Vous pouvez créer une fonction d'assistance pour cela.
la source