PHP выход и еще выходной буфер - PullRequest
2 голосов
/ 12 февраля 2012

Можно ли выйти из сценария, скажем, из-за фатальной ошибки, и все еще вывести мой буфер?Я использую систему шаблонов, которая выполняет заголовок / содержимое / нижний колонтитул.Поэтому я пытаюсь сделать так, чтобы он прекратил выполнение кода в функции fatal_error(), но по-прежнему выводил шаблон буфера (который отправляет сообщение об ошибке пользователю при сохранении шаблона веб-сайта.)в моей функции fatal_error() я использую ob_flush(), и при вызове fatal_error() я получаю белый экран.Вот моя функция

function fatal_error($error_message, $log = true)
{
    setup_error($error_message);

    ob_flush();
    exit();
}

setup_error() говорит сценарию изменить тело содержимого на сообщение об ошибке (чтобы он не анализировал половину тела при возникновении ошибки).Все примеры, которые я просмотрел, говорят, что ob_flush() или ob_end_flush() могут достичь этого, хотя мне не повезло.

Ответы [ 2 ]

4 голосов
/ 12 февраля 2012

Используйте функцию set_error_handler(). Таким образом, вы можете назначить пользовательскую функцию, в вашем случае fatal_error(), для выполнения, когда PHP встречает ошибку. Вы можете делать все что угодно в своей функции, включая очистку буфера и выход.

EDIT:

Следующий код должен делать то, что вы хотите:

set_error_handler('fatal_error', E_ERROR, E_USER_ERROR);

function fatal_error($errno, $errstr, $errfile, $errline)
{
    ob_flush();
    exit();
}

РЕДАКТИРОВАТЬ 2:

Вы можете запустить E_ERROR и, следовательно, протестировать функцию fatal_error() следующим образом:

trigger_error('This is a test error', E_ERROR);
2 голосов
/ 12 февраля 2012

Я бы попробовал также добавить вызов к flush() перед ob_flush().Иногда оба необходимы.

...