Эта функция включает буферизацию вывода. Если буферизация вывода активна,
вывод скрипта не высылается (кроме заголовков), а сохраняется во
внутреннем буфере.
Содержимое этого внутреннего буфера может быть скопировано в строковую
переменную, используя ob_get_contents(). Для вывода
содержимого внутреннего буфера следует использовать ob_end_flush().
В качестве альтернативы можно использовать ob_end_clean()
для уничтожения содержимого буфера.
Внимание
Некоторые web-сервера (например Apache) изменяют рабочую директорию скрипта,
когда вызывается callback-функция. Вы можете вернуть ее назад, используя
chdir(dirname($_SERVER['SCRIPT_FILENAME']))
в callback-функции.
Буферы вывода помещаются в стэк, то есть допускается вызов
ob_start() после вызова другой активной
ob_start(). При этом необходимо вызывать
ob_end_flush() соответствующее количество раз.
Если актины несколько callback-функций,
вывод последовательно фильтруется для
каждой из них в порядке вложения.
Список параметров
output_callback
В качестве необязательного параметра может быть указана функция
output_callback. Эта функция принимает строку
как параметр и должна возвращать строку. Функция будет вызвана при
сбросе (отправке) буфера вывода или очистке (вместе с
ob_flush(), ob_clean() или
аналогичной функцией) или когда буфер выводится в браузер в конце запроса.
При вызове output_callback, она принимает
содержимое буфера вывода как параметр и возвращает новое содержимое,
которое и отправляется в браузер. Если output_callback
не является вызываемой функцией, то эта функция вернет FALSE.
Если callback-функции передано 2 параметра, то второй параметр
рассматривается как битовое значение состоящее из
PHP_OUTPUT_HANDLER_START,
PHP_OUTPUT_HANDLER_CONT и
PHP_OUTPUT_HANDLER_END.
Если output_callback вернет FALSE, то
оригинальная информация отправится в браузер без изменений.
Параметр output_callback может быть игнорирован
передачей значения NULL.
ob_end_clean(), ob_end_flush(),
ob_clean(), ob_flush() и
ob_start() не могут вызываться из callback-функций,
так как их поведение непредсказуемо.
Если вы хотите удалить содержимое буфера, то
верните "" (пустую строку) из callback-функции.
Вы так же не можете вызывать функции
print_r($expression, true) или
highlight_file($filename, true)
из callback-функций буферизации вывода.
Замечание:
В PHP 4.0.4 функция ob_gzhandler() была введена
для облегчения отправки gz-кодированных данных web-браузерам,
поддерживающим сжатые web-страницы. ob_gzhandler()
определяет тип кодировки содержимого, принимаемый браузером,
и возвращает вывод соответствующим образом.
chunk_size
Если передан не обязательный параметр chunk_size,
то буфер буден сброшен после любого вывода превышающего или равного
по размеру chunk_size. Значение
по умолчанию 0 означает, что функция вывода будет
вызвана, когда буфер будет закрыт.
До PHP 5.4.0, значение 1 было специальным
значением, которое устанавливало параметр chunk_size в 4096.
erase
Если не обязательный параметр erase установлен
в FALSE, то буфер не будет удален пока скрипт не закончит работу.
Это приведет к тому, что попытка сбросить или очистить буфер
выдаст уведомление и вернет FALSE при вызове.
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия
Описание
5.4.0
Параметр chunk_size, установленный в 1, теперь приводит к выводу по 1 байту
в выходной буфер.
4.3.2
Функция вернет FALSE в случае, если
output_callback не сможет быть выполнена.
4.2.0
Добавлен параметр erase.
Примеры
Пример #1 Пример callback-функции, определенной пользователем
<?php
function callback($buffer) { // заменить все яблоки апельсинами return (str_replace("яблоки", "апельсины", $buffer)); }
ob_start("callback");
?> <html> <body> <p>Это все равно что сравнить яблоки и апельсины.</p> </body> </html> <?php
ob_end_flush();
?>
Результат выполнения данного примера:
<html>
<body>
<p>Это все равно что сравнить апельсины и апельсины.</p>
</body>
</html>