ob_start

(PHP 4, PHP 5)

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

Описание

bool ob_start ([ callback $output_callback [, int $chunk_size = 0 [, bool $erase = true ]]] )

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

Содержимое этого внутреннего буфера может быть скопировано в строковую переменную, используя 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>

Смотрите также

  • ob_get_contents() - Возвращает содержимое буфера вывода
  • ob_end_clean() - Очищает (стирает) буфер вывода и отключает буферизацию вывода
  • ob_end_flush() - Сброс (отправка) буфера вывода и отключение буферизации вывода
  • ob_implicit_flush() - Функция включает/выключает неявный сброс
  • ob_gzhandler() - callback-функция, используемая для gzip-сжатия буфера вывода при вызове ob_start
  • ob_iconv_handler() - Convert character encoding as output buffer handler
  • mb_output_handler() - Callback function converts character encoding in output buffer
  • ob_tidyhandler() - Функция обратного вызова ob_start для восстановление буфера


Участник рейтинга Тэглайн 2010