У меня есть веб-сайт, который каждый раз, когда пользователь входит или выходит из системы, сохраняет его в текстовом файле.
Мой код не работает при добавлении данных или создании текстового файла, если он не существует .. Вот пример кода
$myfile = fopen("logs.txt", "wr") or die("Unable to open file!");
$txt = "user id date";
fwrite($myfile, $txt);
fclose($myfile);
Кажется, он не добавляется к следующей строке после повторного открытия.
Кроме того, я думаю, что это также приведет к ошибке в ситуации, когда два пользователя будут входить в систему одновременно, повлияет ли это на открытие текстового файла и сохранение его впоследствии?
logs.txt
и добавить содержимое в немИспользуйте
a
режим. Это означаетappend
.источник
a
флаг будет создать файл , если он не не существует и не имеет значения , что убедитесь , что вы действительноappend
новый текст. Для этого\n
это работает, но только если внутри двойных кавычек"
не одиночные кавычки'
Вы можете сделать это OO способом, просто альтернативой и гибкостью:
Затем используйте его следующим образом ... допустим, вы
user_name
сохранили в сеансе (полупсевдокод):Проверьте ваш журнал с этим:
Результат похож на:
github.com/thielicious/Logger
источник
источник
Попробуйте этот код:
Я всегда так использую, и это работает ...
источник
(!file_exists($logPath)) ? 'w':'a'
-a
опция уже имеет правильное поведение, когда файл не существует. Таким образом, можно упростить этот ответ, удалив строку$mode = ...;
и изменив следующую строку на$logfile = fopen($logPath, 'a');
.В вашем коде нет такого режима открытия файлов, как "wr":
Режимы открытия файлов в PHP http://php.net/manual/en/function.fopen.php такие же, как в C: http://www.cplusplus.com/reference/cstdio/fopen/
Существуют следующие основные открытые режимы «r» для чтения, «w» для записи и «a» для добавления, и вы не можете объединить их. Вы можете добавить другие модификаторы, такие как «+» для обновления, «b» для двоичного файла. Новый стандарт C добавляет новый стандартный подспецификатор («x»), поддерживаемый PHP, который может быть добавлен к любому спецификатору «w» (для формирования «wx», «wbx», «w + x» или «w + bx»). "/" WB + х "). Этот подспецификатор заставляет функцию завершиться ошибкой, если файл существует, вместо того, чтобы перезаписывать его.
Кроме того, в PHP 5.2.6 был добавлен основной открытый режим 'c'. Вы не можете комбинировать «c» с «a», «r», «w». «С» открывает файл только для записи. Если файл не существует, он создается. Если он существует, он не усекается (в отличие от 'w'), и вызов этой функции не выполняется (как в случае с 'x'). 'c +' Открыть файл для чтения и записи; в противном случае он ведет себя так же, как «с».
Кроме того, в PHP 7.1.2 была добавлена опция 'e', которую можно комбинировать с другими режимами. Он установил флаг close-on-exec для открытого дескриптора файла. Доступно только в PHP, скомпилированном в соответствии с POSIX.1-2008.
Таким образом, для задачи, как вы ее описали, лучшим режимом открытия файла будет «a». Он открывает файл только для записи. Он помещает указатель файла в конец файла. Если файл не существует, он пытается его создать. В этом режиме fseek () не действует, записи всегда добавляются.
Вот что вам нужно, как уже было указано выше:
источник
Хотя есть много способов сделать это. Но если вы хотите сделать это простым способом и хотите отформатировать текст перед записью в файл журнала. Вы можете создать вспомогательную функцию для этого.
источник