Lafafm
@Lafafm
Development lead, Full stack generalist

Почему обнуляется json файл?

Здравствуйте!

Недавно появилась небольшая проблема. У меня под кроном на сервере выполняется скрипт раз в 2 минуты, при каждом выполнении скрипта данные записываются в json файл для удобного отображения и обработкой js.

За весь день выходит порядка 720 записей, и не маленький размер файла. Для статистики, я бэкаплю этот файл в другой каталог, но почему-то при перемещении файла обнуляется весь Json файл, и там остается только одна запись.

Вот сам код обработчика, который записывает Json данные в файл, и бэкапит его в конце дня:

if(date("Hi") == '0000' || date("Hi") == '0001'){
	rename($name . '.json', 'Prev_data/' . $name . '_' . date("d") . '.json');
}

if(!file_exists($name . '.json')){
	$fp = fopen($name . '.json', "w"); 
	fwrite($fp, "[ ]");
	fclose ($fp);
}

$json = file_get_contents($name . '.json');
$json = json_decode($json);

array_push($json, array($item => $time, "zdate" => $date));

$json = json_encode($json);
file_put_contents($name . '.json', $json);


Заранее спасибо за помощь.
  • Вопрос задан
  • 2694 просмотра
Решения вопроса 1
Судя по всему, резервный файл перетирается, потому что копируется несколько раз. Возможно, несколько экземпляров скрипта отрабатывают одновременно, или вы в crontab что-то напутали.

Попробуйте заменить date("d") на date("U") - и посмотрите что получится. Если я прав, то каждый день будет создаваться по несколько резервных файлов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EnterSandman
@EnterSandman
Эникей
Аттиибут w у fopen
Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.

Честно скажу, код прочитал мельком с мобильного, но уверен что это оно
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы