У меня есть скрипт PHP, это часть:
if($signature == $params_signature) {
error_reporting(E_ALL);
ini_set('display_errors', 1);
ob_start();
echo 'OK'; // send the OK response
header('Connection: close');
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header("Content-Encoding: none");
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
echo 'test';
// some further procesiing
exit;
}
Итак, проблема в том, что ob_start () работает правильно только в настройках error_reporting:
error_reporting(E_ALL);
ini_set('display_errors', 1);
В этом случае вывод «OK», но если я удаляю error_reporting, вывод выводится «OKtest».
Проблема в том, что я не могу оставить сообщение об ошибке на производственном сайте, и я не могу выяснить причину, почему это происходит.
Может быть, нужна дополнительная информация ?!
ОБНОВЛЕНИЕ: Ожидаемое поведение: sctipt отправляет ответ со статусом 200 и body — «ОК», закрывает соединение и продолжает выполнять некоторые внутренние операции.
Приведенный ниже код работает без error_reporting
:
<?php
ob_start();
echo 'OK'; // send the OK response
header('Connection: close');
header('Content-Type: text/html; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header("Content-Encoding: none");
header('Content-Length: '.ob_get_length());
echo 'test';
// some further procesiing
exit;
?>
Я удалил это до вашего последнего эха,
ob_end_flush();
ob_flush();
flush();
Других решений пока нет …