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.

Может быть адаптивным для ООП.

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