У меня возникают проблемы с выходным буфером. Я буферизую свой сценарий и печатаю результат с помощью обратного вызова. Проблема в том, что если в любой момент возникает ошибка, ничего не отображается, и я получаю пустой экран. Я попытался настроить собственные обработчики ошибок, но ничего не работает. У меня такое чувство, потому что ошибки заставляют мой буфер вызывать метод обратного вызова вместо моего обработчика ошибок. Либо это, либо потому, что у меня есть обработчик ошибок как статический метод, но изменение, которое вызывает проблемы в другом месте.
Я бы очень признателен за любую помощь, потому что у меня есть я в тупике!
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/>'; }
Я хотел бы предложить включить журнал ошибок в PHP, который по умолчанию отправит ошибки в журнал ошибок apache. Вы также можете попробовать включить track_errors, но я думаю, что журнал – лучший выбор. Если у вас нет доступа к журналу apache, возможно, вам придется вручную записывать данные.
Файлы журналов и стратегии трассировки необходимы при использовании буферизации вывода и других вещей «за кулисами» (например, ajax).
Вы также можете посмотреть настройку output_buffering. См. Эту статью: http://thinkpositivesoftware.blogspot.com/2009/03/have-blank-php-page.html