8.4. Буферизация вывода
Команды буферизации вывода дополнительно к буферизации Web-сервера добавляют свой уровень буферизации под управлением PHP. Это может привести к незначительному снижению производительности, но такова цена за дополнительное управление.
При вызове функции ob_start весь вывод таких функций, как print и echo, задерживается в буфере, который представляет собой большую область памяти. Содержимое буфера можно переслать в браузер с помощью функции ob_end_flush или удалить его с помощью функции ob_end_clean. Как говорилось в главе 7, "Операции ввода-вывода и доступ к диску", заголовки не могут отправляться после того, как была отправлена первая часть содержимого. Поэтому эти функции позволяют избегать ошибок, которые возникают из-за отправки заголовков после содержимого.
ob_clean()
Эта функция удаляет содержимое буфера вывода, не прекращая буферизацию вывода. Новое поступающее содержимое опять будет накапливаться в буфере.
ob_end_clean()
Функция ob_end_clean завершает буферизацию вывода и удаляет содержимое из буфера. В браузер не отсылается ничего. 
ob_end_flush()
Функция ob_end_flush завершает буферизацию вывода и отправляет содержимое буфера в браузер.
ob_flush()
Функция ob_flush отправляет содержимое буфера в браузер и очищает буфер. string ob_get_clean()
Функция ob_get_clean возвращает содержимое буфера в браузер и очищает буфер. Аналогичного результата можно добиться путем вызова функции ob_getcontents и последующего вызова функции ob_clean.
string ob_get_flush()
Функция ob_get_flush возвращает содержимое буфера, отправляет его в браузер и очищает буфер. Аналогичного результата можно добиться с помощью вызова функции ob_getcontents и последующего вызова функции ob_flush.
string ob_get_contents()
Функция ob_get_contents возвращает содержимое буфера вывода. integer ob_get_length()
Эта функция возвращает количество байтов в буфере вывода.
integer ob_get_level()
Функция ob_get_level возвращает уровень вложения буфера вывода. Каждый вызов ob_start начинается с буфера вывода, вложенного во внешний буфер вывода. Вне любого вызова функции ob_start эта функция возвращает 1.
array ob_get_status(boolean full)
Функция ob_get_status возвращает массив, описывающий текущий статус буфе­ризации вывода. По умолчанию он возвращает ассоциативный массив со следующими элементами: level, type, status, name, del. Если для аргумента full задано значение TRUE, возвращаемым значением является массив, проиндексированный по уровню вложения. На момент написания этой книги данная функция находилась на стадии эксперимента.
ob_gzhandler(string buffer, integer mode)
Функция ob_gzhandler возвращает заданный буфер после его обработки с помощью алгоритма gzip. Подразумевается, что она должна использоваться в качестве дескриптора функции ob_start.
ob_iconv_handler(string buffer, integer mode)
Функция ob_iconv_handler преобразует текст из внутренней кодировки символов во внешнюю. Подразумевается, что она должна использоваться в качестве дескриптора функции ob_start. Этот дескриптор появляется благодаря использованию расширения iconv. С помощью функции iconv_set_encoding можно задать кодировку, которую использует дескриптор. Узнать текущую кодировку можно посредством функции iconv_get_encoding. С помощью функции iconv можно закодировать отдельные строки.
ob_implicit_flush(boolean on)
Функция ob_implicit_flush вызывает сброс буфера после любой команды, создающей вывод.
array ob_list_handlers()
Функция ob_list_handlers возвращает массив имеющихся дескрипторов. ob_start(string callback)
Функция ob_start (листинг 8.6) включает режим буферизации вывода. В этом буфере сохраняется весь текст, отправленный функцией print и аналогичными функциями. Он не будет отправлен в браузер до тех пор, пока не будет вызвана функция ob_end_flush. Кроме того, по завершении работы сценария сбрасывается весь буфер.
Необязательный аргумент callback позволяет пропустить весь вывод через поль­зовательскую функцию. Эта функция должна принимать и возвращать строку.

Листинг 8.6. Функция obstart

<?php
//начать буферизацию вывода ob_start();
?>
<html> <head>
<title>ob_start</title>
</head>
<body>
<?php
print("Начиная с этого места ");
print(strlen(ob_get_contents()));
print(" символы размещаются в буфере .<br>n"),-
?>
</body> </html> <?php
// добавить проверочный заголовок header("X-note: COREPHP"); // сбросить содержимое ob_end_flush();
?>