работает - буферизация вывода php




PHP-буфер ob_flush() против flush() (3)

В чем разница между ob_flush() и flush() и почему я должен назвать оба?

ob_flush() говорит:

Эта функция будет отправлять содержимое выходного буфера (если есть).

Ссылка flush() говорит:

Сбрасывает буферы записи PHP и любые внутренние ресурсы PHP (CGI, веб-сервер и т. Д.).

Однако он продолжает говорить:

[it], возможно, не сможет переопределить схему буферизации вашего веб-сервера ...

Итак, мне кажется, что я могу просто использовать ob_flush() все время. Тем не менее, я получаю странные результаты, когда я это делаю. Может кто-нибудь объяснить в простых терминах, что здесь происходит?


Я думаю, это связано с вашим предыдущим вопросом . Существенным преимуществом использования буферизации вывода является то, что он используется наряду с сжатием данных. Если вы не используете ob_gzhandler , получить немного. только один flush просто фиксирует все выходные данные на сервере. С ob_start и его коллегами ob_flush , ob_flush и ob_end_flush , все, что ждет, чтобы быть сжатым (посмотрите на flush и ob_flush как на ob_flush на разные ковши - ob отправляет данные на flush , flush отправляет данные в браузер - может быть неточно, но это идея) будут завернуты и отправлены клиенту.


ob_flush() - это флеш на высоком уровне. Он очищает буферы высокого уровня и помещает весь контент в низкоуровневые внутренние буферы, готовые к отправке.

  • Обратите внимание, что семейство функций ob_ создает стеки буферов, поэтому просто слепо писать ob_flush() повсюду действительно даст вам «странные результаты», если бы код был написан, чтобы воспользоваться этой укладкой.

flush() - это низкоуровневый флеш, инструктирующий PHP для очистки внутренних буферов данных низкого уровня.

Ниже все еще будут буферы сокетов; ниже, есть буферы сетевого уровня. И, на самом низком уровне, очередь электронов, спускаясь по кабелю передачи данных.


ob_flush сбрасывает выходные буферы , созданные с помощью функции ob_start

flush flushes буферизует вывод скрипта PHP самому вызывающему





output-buffering