PHP

Буферизация вывода в броузер

Задача
Необходимо начать генерацию вывода раньше, чем закончится пересылка заголовков или cookies.

Решение
Вызовите функцию ob_start() в начале вашей страницы и функцию ob_end_flush() в конце страницы. Кроме того, можно поменять местами команды, генерирующие код, и команды, посылающие заголовки.

Выходная информация не будет послана до тех пор, пока не будет вызвана функция ob_end_flush():

<?php ob_start(); ?>
I haven't decided if I want to send a cookie yet.
<?php setcookie('heron','great blue'); ?>
Yes, sending that cookie was the right decision.
<?php ob_end_flush(); ?>


Обсуждение
Можно передать функции ob_start() имя функции обратного вызова (callback), чтобы она обработала буфер вывода. Это полезно для повторной обработки всего содержимого страницы, например чтобы скрыть адреса электронной почты от автоматов, отыскивающих адреса:

<?php
function mangle_email($s) {
return preg_replace('/([^@\s]+)@([-a-z0-9]+\.)+[a-z]{2,}/is',
'<$1@...>',
$s);
}
ob_start('mangle_email');
?>
I would not like spam sent to ronald@example.com!
<?php ob_end_flush(); ?>


Функция mangle_email() преобразует вывод в:
I would not like spam sent to <ronald@...>!


Параметр конфигурации output_buffering включает буферизацию вывода для всех страниц:
output_buffering = On


Точно так же параметр output_handler устанавливает функцию обратного вызова для обработки буфера вывода, которая будет использована на всех страницах:

output_handler=mangle_email


Установка параметра output_handler автоматически устанавливает параметр output_buffering в on.
Теги:
броузер
Добавлено: 22 Июля 2018 10:27:56 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...