Tengo un sitio web que cada vez que un usuario inicia o cierra sesión lo guardo en un archivo de texto.
Mi código no funciona al agregar datos o crear un archivo de texto si no existe. Aquí está el código de muestra
$myfile = fopen("logs.txt", "wr") or die("Unable to open file!");
$txt = "user id date";
fwrite($myfile, $txt);
fclose($myfile);
Parece que no se agrega a la siguiente línea después de abrirlo nuevamente.
También creo que también tendría un error en una situación en la que 2 usuarios inician sesión al mismo tiempo, ¿afectaría abrir el archivo de texto y guardarlo después?
logs.txt
y agrega el contenido en élUsa el
a
modo. Es sinónimo deappend
.fuente
a
bandera creará el archivo si no existe y no importa lo que se asegure de que realmente hayappend
texto nuevo. Para el\n
funciona pero solo si entre comillas dobles"
no comillas simples'
Puedes hacerlo de la manera OO, solo una alternativa y flexible:
Luego úselo de esta manera ... supongamos que lo ha
user_name
almacenado en una sesión (semi pseudocódigo):Verifique su registro con esto:
El resultado es como:
github.com/thielicious/Logger
fuente
fuente
Prueba este código:
Siempre lo uso así, y funciona ...
fuente
(!file_exists($logPath)) ? 'w':'a'
: laa
opción ya tiene el comportamiento correcto cuando el archivo no existe. Por lo tanto, puede simplificar esta respuesta eliminando la línea$mode = ...;
y cambiando la siguiente línea a$logfile = fopen($logPath, 'a');
.No hay modo de archivo abierto como "wr" en su código:
Los modos de apertura de archivos en PHP http://php.net/manual/en/function.fopen.php son los mismos que en C: http://www.cplusplus.com/reference/cstdio/fopen/
Existen los siguientes modos abiertos principales "r" para leer, "w" para escribir y "a" para agregar, y no puede combinarlos. Puede agregar otros modificadores como "+" para actualizar, "b" para binario. El nuevo estándar C agrega un nuevo subespecificador estándar ("x"), compatible con PHP, que se puede agregar a cualquier especificador "w" (para formar "wx", "wbx", "w + x" o "w + bx "/" wb + x "). Este subespecificador obliga a la función a fallar si el archivo existe, en lugar de sobrescribirlo.
Además de eso, en PHP 5.2.6, se agregó el modo abierto principal 'c'. No puede combinar 'c' con 'a', 'r', 'w'. La 'c' abre el archivo solo para escribir. Si el archivo no existe, se crea. Si existe, no está truncado (en oposición a 'w'), ni falla la llamada a esta función (como es el caso con 'x'). 'c +' Abre el archivo para leer y escribir; de lo contrario, tiene el mismo comportamiento que 'c'.
Además, y en PHP 7.1.2 se agregó la opción 'e' que se puede combinar con otros modos. Establece el indicador close-on-exec en el descriptor de archivo abierto. Solo disponible en PHP compilado en sistemas conformes POSIX.1-2008.
Entonces, para la tarea como la ha descrito, el mejor modo de abrir archivo sería 'a'. Abre el archivo solo para escribir. Coloca el puntero del archivo al final del archivo. Si el archivo no existe, intenta crearlo. En este modo, fseek () no tiene efecto, las escrituras siempre se agregan.
Esto es lo que necesita, como ya se señaló anteriormente:
fuente
Aunque hay muchas formas de hacer esto. Pero si desea hacerlo de una manera fácil y desea formatear el texto antes de escribirlo en el archivo de registro. Puede crear una función auxiliar para esto.
fuente