ob_start
(PHP 4, PHP 5, PHP 7)
ob_start — Включение буферизации вывода
Описание
$callback = null
, int $chunk_size = 0
, int $flags = PHP_OUTPUT_HANDLER_STDFLAGS
) : boolЭта функция включает буферизацию вывода. Если буферизация вывода активна, никакой вывод скрипта не отправляется (кроме заголовков), а сохраняется во внутреннем буфере.
Содержимое этого внутреннего буфера может быть скопировано в строковую переменную, используя ob_get_contents(). Для вывода содержимого внутреннего буфера следует использовать ob_end_flush(). В качестве альтернативы можно использовать ob_end_clean() для очистки содержимого буфера.
Некоторые веб-серверы (например, Apache) изменяют рабочую директорию скрипта
при вызове callback-функции. Вы можете вернуть ее назад, используя
chdir(dirname($_SERVER['SCRIPT_FILENAME']))
в callback-функции.
Буферы вывода помещаются в стек, то есть допускается вызов ob_start() после вызова другой активной ob_start(). При этом необходимо вызывать ob_end_flush() соответствующее количество раз. Если активны несколько callback-функций, вывод последовательно фильтруется для каждой из них в порядке вложения.
Список параметров
-
callback -
Можно задать необязательный параметр
callback. Эта функция принимает строку в виде аргумента и должна также вернуть строку. Она вызывается при сбросе (отправке) или очистке (с помощью ob_flush(), ob_clean() или подобных функций) или если буфер вывода сбрасывается в браузер по окончанию запроса. При вызове функцииcallback, она получает содержимое буфера и, как ожидается, должна вернуть обновленное содержимое для буфера вывода, которое будет отправлено браузеру. Еслиcallbackне является допустимой функцией, то эта функция вернетfalse. Описание функции для этого параметра:handler ( string$buffer, int$phase= ? ) : string-
buffer - Содержимое буфера вывода.
-
phase -
Битовая маска констант
PHP_OUTPUT_HANDLER_*.
Если
callbackвернетfalse, то оригинальная информация отправится в браузер без изменений.Параметр
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-функции.Замечание:
Функция ob_gzhandler() была введена для облегчения отправки gz-кодированных данных браузерам, поддерживающим сжатые веб-страницы. ob_gzhandler() определяет тип кодировки содержимого, принимаемый браузером, и возвращает вывод соответствующим образом.
-
-
chunk_size -
Если передан необязательный параметр
chunk_size, то буфер буден сброшен после любого вывода, превышающего или равного по размеруchunk_size. Значение по умолчанию0означает, что функция вывода будет вызвана, когда буфер будет закрыт.До PHP 5.4.0, значение
1было специальным значением, которое устанавливало параметрchunk_sizeв 4096. -
flags -
Параметр
flagsявляется битовой маской, которая управляет операциями, которые можно совершать над буфером вывода. По умолчанию она позволяет буферу вывода быть очищенным, сброшенным и удаленным, что равносильно значениюPHP_OUTPUT_HANDLER_CLEANABLE|PHP_OUTPUT_HANDLER_FLUSHABLE|PHP_OUTPUT_HANDLER_REMOVABLEилиPHP_OUTPUT_HANDLER_STDFLAGSкак сокращение этой комбинации.Каждый флаг управляет доступом к набору функций, как описано ниже:
Константа Функции PHP_OUTPUT_HANDLER_CLEANABLEob_clean(), ob_end_clean() и ob_get_clean(). PHP_OUTPUT_HANDLER_FLUSHABLEob_end_flush(), ob_flush() и ob_get_flush(). PHP_OUTPUT_HANDLER_REMOVABLEob_end_clean(), ob_end_flush() и ob_get_flush().
Возвращаемые значения
Возвращает true в случае успешного завершения или false в случае возникновения ошибки.
Примеры
Пример #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>
Пример #2 Создание нестираемого буфера вывода с совместимостью с версиями PHP 5.3 и 5.4
<?php
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^
PHP_OUTPUT_HANDLER_REMOVABLE);
} else {
ob_start(null, 0, false);
}
?>
Смотрите также
- ob_get_contents() - Возвращает содержимое буфера вывода
- ob_end_clean() - Очистить (стереть) буфер вывода и отключить буферизацию вывода
- ob_end_flush() - Сбросить (отправить) буфер вывод и отключить буферизацию вывода
- ob_implicit_flush() - Включение/выключение неявного сброса
- ob_gzhandler() - callback-функция, используемая для gzip-сжатия буфера вывода при вызове ob_start
- ob_iconv_handler() - Преобразует символы из текущей кодировки в кодировку выходного буфера
- mb_output_handler() - Callback-функция, преобразующая кодировку символов в выходном буфере
- ob_tidyhandler() - Функция обратного вызова ob_start для восстановление буфера