Создание или запись / добавление в текстовый файл

У меня есть веб-сайт, который при каждом входе в систему или выходе из системы я сохраню в текстовом файле.

мой код не работает при добавлении данных или создает текстовый файл, если он не существует. Вот пример кода

$myfile = fopen("logs.txt", "wr") or die("Unable to open file!"); $txt = "user id date"; fwrite($myfile, $txt); fclose($myfile); 

но кажется, что она не добавляется к следующей строке после того, как я снова ее открою.

также. Я думаю, что у него также была бы ошибка в ситуации, например, если бы 2 пользователя входили в одно и то же время, это повлияло бы на открытие текстового файла и сохранение его после?

Solutions Collecting From Web of "Создание или запись / добавление в текстовый файл"

Попробуйте что-то вроде этого:

  $txt = "user id date"; $myfile = file_put_contents('logs.txt', $txt.PHP_EOL , FILE_APPEND | LOCK_EX); 

Используйте режим a . Это означает append .

 $myfile = fopen("logs.txt", "a") or die("Unable to open file!"); $txt = "user id date"; fwrite($myfile, "\n". $txt); fclose($myfile); 

Вы можете сделать это способом OO, просто альтернативным и гибким:

 class Logger { private $file, $prefix; public function __construct($filename) { $this->file = $filename; } public function setTimestamp($format) { $this->prefix = date($format)." &raquo; "; } public function putLog($insert) { if (isset($this->prefix)) { file_put_contents($this->file, $this->prefix.$insert."<br>", FILE_APPEND); } else { echo "<script>alert(\"Timestamp is not set yet.\");</script>", die; } } public function getLog() { $content = @file_get_contents($this->file); return $content; } } 

Затем используйте его вот так: допустим, у вас есть имя пользователя, хранящееся в сеансе (полу псевдокод):

 $log = new Logger("log.txt"); $log->setTimestamp("DM d 'y hi A"); if (user logs in) { $log->putLog("Successful Login: ".$_SESSION["user_name"]); } if (user logs out) { $log->putLog("Logout: ".$_SESSION["user_name"]); } 

Проверьте свой журнал следующим образом:

 $log->getLog(); 

Результат выглядит так:

 Sun Jul 02 '17 05.45 PM » Successful Login: JohnDoe Sun Jul 02 '17 05.46 PM » Logout: JohnDoe 

github.com/thielicious/Logger

В вашем коде нет такого открытого режима файла, как «wr»:

 fopen("logs.txt", "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'. «C» открывает файл только для записи. Если файл не существует, он создается. Если он существует, он не усекается (в отличие от «w»), и вызов этой функции не выполняется (как в случае с «x»). 'c +' Откройте файл для чтения и записи; в противном случае он имеет такое же поведение, как и «c».

Кроме того, в PHP 7.1.2 добавлен параметр «e», который можно комбинировать с другими режимами. Он устанавливает флаг close-on-exec в открывшемся дескрипторе файла. Доступно только в PHP, составленном на основе совместимых систем POSIX.1-2008.

Итак, для задачи, как вы ее описали, лучшим режимом открытого файла будет «a». Он открывает файл только для записи. Он помещает указатель файла в конец файла. Если файл не существует, он пытается его создать. В этом режиме fseek () не действует, записи всегда добавляются.

Вот что вам нужно, как уже указывалось выше:

 fopen("logs.txt", "a") 
 $logged_user_id = $this->session->userdata('user_id'); $logged_user_id = isset($logged_user_id)?$logged_user_id:NULL; $insert_log = 'process => '.$process.', details => '.$details.', user_type => '.$user_type.', user_id => '.$logged_user_id.',reg_at => '.date("d/m/Y h:i:sa"); $todate= date('dm-Y'); file_put_contents(APPPATH."assets/logs/".$todate."_log.txt", $insert_log.PHP_EOL , FILE_APPEND | LOCK_EX);