Задать вопрос
@safari134

Каким образом объединить файлы в один на php?

Я новичок в php и проблема такая, у меня есть чат бот, который сохраняет переписку между ботом и пользователем и отдельные файлы, но как сделать так чтобы все файлы с данными объединились и записались в один файл? Если я правильно понимаю, то мне необходимо создать файл куда будут записываться данные?

6273cda2039a2343524260.png

<?php

$path = __DIR__ . '/chats/';

$data['result'] = 'success';

// получаем данные, которые пришли на сервер
$input = file_get_contents('php://input');
// декодируем полученную JSON строку
$data = json_decode($input, true);
// проверяем была ли ошибка при декодировании JSON
if (json_last_error() !== JSON_ERROR_NONE) {
  $data['result'] = 'error';
  $data['error'] = 'Произошла ошибка при декодировании JSON строки';
  echo json_encode($data);
  exit();
}

// получаем id клиента
$idClient = $data['id'];
// получаем сообщения из чата
$chat = $data['chat'];

$start = $data['start'];
//
$date = $data['date'];

// имя файла
$fileName = $path.$idClient;

$output = '';

foreach ($chat as $key => $value) {
  $output .= $key . '[' . $value['type'] . ']:' . PHP_EOL;
  $output .= strip_tags($value['content']) . PHP_EOL;
}

if (!file_exists($fileName)) {
  $text = '// ' . $idClient . ' //' . PHP_EOL . PHP_EOL;
  if ($start) {
    $text .= '/////// start ///////' . PHP_EOL . $date . PHP_EOL . '/////// start ///////' . PHP_EOL;

  }
  $text .= $output;
  file_put_contents($fileName, $text, LOCK_EX);
} else {
  $text = '';
  if ($start) {
    $text .= PHP_EOL. '/////// start ///////' . PHP_EOL . $date . PHP_EOL . '/////// start ///////' . PHP_EOL;
  }
  $text .= $output;
  file_put_contents($fileName, $text, FILE_APPEND | LOCK_EX);
}


echo json_encode($data);
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@rPman
и да и нет
нет - потому что объединять в один файл не надо
да - потому что есть 'базы данных в файле', поддерживающая многопользовательский доступ и транзакции - sqlite

если ты объединишь все в один файл, то у тебя возникнет проблема многопользовательского доступа (на запись), пример - у тебя одновременно два разных человека напишут боту, два одновременных php процесса начнут читать и писать файл, и если эти события будут не последовательными, то либо в файле будет каша либо сообщения от одного 'чуть чуть опоздавшего' будут перезаписаны

Настоятельно рекомендую освоить базу данных, тем более благодаря php PDO и sqlite ничего настраивать устанавливать и тюнить не надо, все максимально удобно и просто
Ответ написан
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
как уже сказал rPman лучше хранить записи в базе, объединение только ухудшит работу скрипта.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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