PHP output_buffering работает только с ошибкой error_reporting(E_ALL)

У меня есть скрипт 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);

В этом случае вывод "ОК", но если я удаляю error_reporting, вывод выводится "ОКТест".

Проблема в том, что я не могу оставить сообщение об ошибке на производственном сайте, и я не могу выяснить причину, почему это происходит.

Может быть, нужна дополнительная информация?!

ОБНОВЛЕНИЕ: Ожидаемое поведение: sctipt отправляет ответ со статусом 200 и тело - "ОК", закрывает соединение и продолжает выполнять некоторые внутренние операции.

1 ответ

Приведенный ниже код работает без 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();
Другие вопросы по тегам