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