$output = ob_get_contents();
ob_end_clean();
echo json_encode($data);
ob_start();
echo $output;
Этот код вызывается как API с другого сервера, и я хочу отправить данные json обратно на этот сервер, но я хочу сохранить $ output в буфере вывода, чтобы позже я мог записать его в файл. json_encode($data);
не отправляется запрашивающему скрипту. Я пробовал много вариантов, используя flush()
а также ob_flush
но не сработало. Когда я добавлю die()
сразу после json_encode($data);
линия это работает, за исключением того, что я на самом деле не хочу этого die()
в тот момент. Как я могу это исправить?
Как насчет:
Сохраните результат в переменной, отобразите переменную, зарегистрируйте переменную. Нет необходимости в буферизации вывода:
$output = json_encode($data);
echo $output;
log_to_whatever($output);
Если вам нужна буферизация вывода, то вы должны начать буферизацию до того, как вы сделаете эхо:
ob_start();
echo json_encode($data);
$output = ob_get_clean(); // Shorthand for get and clean
echo $output;
log_to_whatever($output);
Вместо очистки буфера вы можете фактически очистить буфер (= отправить его клиенту), но все равно получить его в переменную.
ob_start();
echo json_encode($data);
$output = ob_get_flush(); // Shorthand for get and flush
// echo $output; This is not needed anymore, because it is already flushed
log_to_whatever($output);
Но в любом случае кажется, что это громоздкие альтернативы простому первому решению, по крайней мере, в представленном вами сценарии.
Других решений пока нет …