Как правильно выводить данные php?

Приветствую всех, кто заглянул.

Есть файл ../api/index.php, его вызываю с js по средствам XMLHttpRequest.
В файле api я вызываю http запрос стороннего сервиса и возвращаю тело ответа. Если запрос вылетает по времени, то возвращаю строку '{"header": {"status": 503,"error": "service unavailable"}}'

Для вывода ответа я использую print_r($result,true);

Только вот проблема. Когда со стороннего сервиса приходит ответ вовремя, то print_r работает хорошо, а когда я хочу вернуть вышеуказанную строку JSON с ошибкой 503, то на стороне клиента (JS) приходит пустая строка.
А если пользоваться не print_r, а echo, тогда вывод просто строки работает корректно, а JSON ответ стороннего сервиса выводится с "1" на конце.
Я с этим боролся как раз подставив true во второй параметр функции print_r.

Сторонним сервисом я называю сервер БД, php у нас просто как шлюз для прямого взаимодействия с клиентом. В общем для безопасности и чтобы не нагружать сервер БД огромным кол-вом сеансов и т п.
Версия PHP 8.1

Вот упрощенный код в файле api:
$ch = curl_init('serverDB.com/ping');
curl_setopt($ch, CURLOPT_TIMEOUT, 2);//TODO: delete after debug

$result = curl_errno($ch) ? '{"header": {"status": 503,"error": "service unavailable"}}' : curl_exec($ch);
curl_close($ch);
print_r($result,true);
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Вообще-то curl_errno() показывает РЕЗУЛЬТАТ запуска функции curl_exec(). Поэтому вызывать её раньше - просто глупо.
Разбирайтесь с результатом curl_exec(), если там должен быть JSON - значит просто отрезайте лишний "1" в конце строки.
И используйте именно echo(), именно им и нужно делать вывод в stdout. Использовать print_r(), даже с true - это одевать штаны через голову.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Специально для тех, кого интересует этот животрепещущий вопрос и персонально для Максим Ткачев.

print_r($result,true); - это бред обкуренного жирафа. Эта строчка не выводит вообще ничего.
Про функцию print_r надо забыть, она была нужна только в 4 версии РНР.

Чтобы вывести любые данные, полученные курлом, надо использовать обычное echo
Предварительно задав CURLOPT_RETURNTRANSFER
А если что-то ещё не выводится, или выводится не так, то надо смотреть, где ещё в коде написан бред.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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