Функции управления выводом
Функции управления выводом
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(), то сценарий не выведет ничего, если вывод из буфера не производился явно другими функциями.