Ошибки внутри выходного буфера

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

Я был бы очень признателен за любую помощь, потому что этот поставил меня в тупик!

public function constructor()
{
    ob_start(array(__CLASS__, 'render'));
    self::$buffer_level = ob_get_level();

    set_error_handler(array(__CLASS__, 'exception_handler'));
    set_exception_handler(array(_CLASS__, 'exception_handler'));

    RUNNING MY SCRIPT HERE

    ob_end_flush();
}

public static function exception_handler($exception, $message = NULL, $file = NULL, $line = NULL)
{
    while (ob_get_level() > self::$buffer_level)
    {
    ob_end_clean();
    }

    echo $exception.' - '.$message.' - '.$file.' - '.$line.'<br/>';
}

1 ответ

Я бы предложил включить ведение журнала ошибок в PHP, который будет отправлять ошибки в журнал ошибок apache по умолчанию. Вы также можете попробовать включить track_errors, но я думаю, что журнал - лучший выбор. Если у вас нет доступа к журналу apache, возможно, вам придется регистрировать вещи вручную.

Файлы журналов и стратегии трассировки важны при использовании буферизации вывода и других "закулисных" вещей (таких как ajax).

Вы также можете взглянуть на настройку output_buffering. Смотрите эту статью: http://thinkpositivesoftware.blogspot.com/2009/03/have-blank-php-page.html

Другие вопросы по тегам