PHP Whoops ошибка обрабатывать очистить буфер
вопрос
В процедурных сценариях содержимое обработчика PHP Whoops Pretty Page будет смешано с частичным содержимым из буфера приложений. К сожалению, могут появляться зашифрованные или выводить внутри скрытого HTML-тега.
Вопрос
Как очистить предыдущий буфер перед буферами обработчика Whoops?
1 ответ
Следующее решение для меня:
На самой ранней стадии вашего сценария и, возможно, только в режиме ОТЛАДКИ или РАЗРАБОТЧИКА, как я и сделал вам:
if(DEVELOPER_DEBUG === true)
ob_start();
Тогда, где вы заявляете, что я сделал упс:
if(DEVELOPER_DEBUG === true)
{
$_whoops = new \Whoops\Run();
$_whoops->pushHandler(function(){
ob_clean();
});
$_handler = new \Whoops\Handler\PrettyPageHandler();
$_whoops->pushHandler($_handler);
$_whoops->register();
}
Это работало безупречно в моем случае использования в процедурных сценариях для очистки любого первоначально сгенерированного буфера до того, как Whoops начнет свой собственный вывод.
Почему это работает
ob_start() может вызываться несколько раз, функция очистки или очистки буфера должна вызываться столько же раз, сколько start вызывался в последовательности.
Заставляя ваше приложение запускать свой собственный буфер, оно делает его ресурсом, который можно очистить. К сожалению, всегда запускает и свой собственный буфер, поэтому, регистрируя обработчик для очистки первого буфера (вашего приложения), а затем в случае ошибки, К сожалению, может очистить этот предыдущий буфер.
Контроль буфера
Например, при каждом вызове ob_start создается инкрементный буфер.
Если вы вызываете ob_start 3 раза, вам нужно вызывать ob_flush 3 раза, чтобы вывести весь буферизованный контент.
Если вы вызываете его один раз, вы только очистите или очистите содержимое, сгенерированное до объявления следующего ob_start.
Может быть адаптивным для ООП.