Справочник по PHP

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


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().

<?phpfunction c($str) { // получает содержимое буфера  return nl2br($str); // возвращает содержимое буфера}function d($str) { // получает содержимое буфера  return strtoupper($str); // возвращает содержимое буфера}?><?phpob_start("c");?> Тут различный текст... <?php// преобразовывать текст длее в верхний регистрob_start("d");?> еще что-то... <?phpob_end_flush();?> ....... <?phpob_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(), то сценарий не выведет ничего, если вывод из буфера не производился явно другими функциями.


Содержание раздела