Функции управления выводом

Функции управления выводом

ob_start

Включение буферизации вывода.

Синтаксис:

void ob_start([string output_callback])

После вызова этой функции включается буферизация вывода и, пока она активна, никакие из выводящихся данных не будут посланы браузеру, а будут сохраняться во внутреннем буфере PHP.

Содержимое буфера может быть скопировано в строковую переменную функцией ob_get_contents(). Для вывода содержимого из буфера используется функция ob_end_flush(). Удалить содержимое буфера позволяет функция ob_end_clean().

В аргументе output_callback можно указать функцию, которая будет автоматически вызываться при выводе содержимого буфера. Обычно это используется для модификации содержимого буфера перед выводом (например, сжатия). Тогда при вызове функции ob_end_flush() в указанную функцию будет передаваться содержимое буфера, а то, что она возвратит, будет выведено (заметьте, сама функция не должна ничего выводить).

Буферизация может быть вложенной, и тогда она обрабатывается соответственно вложенности; и содержимое, выводимое из буфера нижнего уровня, будет включаться в буфер верхнего уровня. Не забывайте, что для вывода всего буферизованного содержимого необходимо вызывать функцию ob_end_flush() столько же раз, сколько была вызвана ob_start().

<?php

function c($str) { // получает содержимое буфера

return nl2br($str); // возвращает содержимое буфера

}

function d($str) { // получает содержимое буфера

return strtoupper($str); // возвращает содержимое буфера

}

?>

<?php

ob_start("c");

?>

Тут различный текст...

<?php

// преобразовывать текст длее в верхний регистр

ob_start("d");

?>

еще что-то...

<?php

ob_end_flush();

?>

.......

<?php

ob_end_flush();

?>

ob_get_contents

Получение содержимого буфера вывода.

Синтаксис:

string ob_get_contents()

Если буферизация неактивна, возвращается false.

ob_get_length

Получение длины данных в буфере вывода.

Синтаксис:

string ob_get_length()

Если буферизация неактивна, возвращается false.

ob_end_flush

Вывод содержимого буфера.

Синтаксис:

void ob_end_flush(void)

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

flush

Вывод всего содержимого буфера.

Синтаксис:

void flush(void);

Функция воздействует только на буферизацию PHP и не может контролировать схему буферизации web-сервера или браузера.

Некоторые серверы, в особенности под Win32, буферизуют выводящиеся сценарием данные до того, как сценарий завершится и данные будут отосланы браузеру.

Браузер, в свою очередь, также может буферизировать получаемые данные до их отображения. Netscape, например, буферизирует текст до получения символа завершения строки или открывающего тега, а для таблиц - до получения тега </table> таблицы верхнего уровня.

ob_end_clean

Очистка буфера.

Синтаксис:

void ob_end_clean(void);

Вызов функции отключает буферизацию на текущем уровне.

ob_implicit_flush

Установление режима буферизации.

Синтаксис:

void ob_implicit_flush([int flag]);

Если в аргументе указано ненулевое значение или оно не указано, то при осуществлении каждой операции вывода будет неявно вызываются функция flush().

Надо отметить, что часто эта функция работает курьезно; например, если в конце сценария вызвать функцию ob_end_clean(), то сценарий не выведет ничего, если вывод из буфера не производился явно другими функциями.