@eQ1
Await головного мозга.

Запись в файл данных из форм, с сохранением предыдущих записанных данных. Как реализовать?

Доброго времени суток!
Имеется простая форма из 4 input`ов и php-обработчик, который записывает данные в БД. Появилась необходимость эти данные помимо записи в БД еще записать и в текстовый файл. Таким образом, чтобы данные в текстовом файле имели вид

Заголовок 1: <Данные из формы>
Заголовок 2: <Данные из формы>
Заголовок 3: <Данные из формы>
Заголовок 4: <Данные из формы>


Реализовал это таким образом:
if (isset($data['do_send'])) {
        $errors = array();
       //проверка на заполненность каждого input`a

        if (empty($errors)) {
            //запись в бд

            $file = 'test.txt';
            $current = file_get_contents($file);
            $current = 'Логин:' .$data['login']. '\n
Пароль:' .$data['password']. '\n
Майл:' .$data['mail']. '\n
Инвент:' .$data['inventory']. '\n';
            file_put_contents($file, $current);
        }

Запись в текстовый файл проходит успешно, однако при повторном использовании формы ранее сохраненные данные заменяются новыми. Получается, что в текстовом файле постоянно одна запись. Как реализовать сохранение всех записей, чтобы данные в текстовом файле имели вид?
// первая отправка формы
Заголовок 1: <Данные из формы>
Заголовок 2: <Данные из формы>
Заголовок 3: <Данные из формы>
Заголовок 4: <Данные из формы>

//вторая отправка формы
Заголовок 1: <Данные из формы>
Заголовок 2: <Данные из формы>
Заголовок 3: <Данные из формы>
Заголовок 4: <Данные из формы>

//третья отправка формы
Заголовок 1: <Данные из формы>
Заголовок 2: <Данные из формы>
Заголовок 3: <Данные из формы>
Заголовок 4: <Данные из формы>
  • Вопрос задан
  • 518 просмотров
Решения вопроса 1
DevMan
@DevMan
file_put_contents($file, $current . PHP_EOL, FILE_APPEND);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gpk
@gpk
Если есть вероятность, что произойдёт параллельное одновременное обращение к скрипту, нужно предусмотреть блокировку файла:
$fd = fopen($file, 'a+');
if (flock($fd, LOCK_EX | LOCK_NB)) {
   /*...*/
   fwrite($fd, $current.PHP_EOL);
}
fclose($fd);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы