Буферизация всего кода
Если захотите создать обёртку над всем кодом и выводить код из буфера, для этого можно воспользоваться решением из коробки — буфер вывода по умолчанию.
За активацию буфера по умолчанию отвечает директива output_buffering
, её нужно выставить в значение On
и указать размер буфера который нам потребуется. При достижении лимита, буфер будет отправлен в браузер пользователю. Данная директива может быть проставлена в двух кофигурационных файлах:
php.ini
.htaccess
.htaccessphp_value output_buffering 4096
Если при включенном буфере проверить уровень вложенности и вызвать функцию ob_get_level()
, получим значение 1
:
if (ini_get('output_buffering')) {
// 1
echo ob_get_level();
}
Если включить данный буфер, можно будет избежать ошибок вида headers already sent
, но только пока буфера будет хватать, но никогда так не делайте, понадеявшись на данный метод, фактически закладываем бомбу замедленного действия, неизвестно когда она рванёт и посыпит ошибками:
// сохраняем значение буфера
$buffer = ini_get('output_buffering');
// выводим текст на байт меньше буфера
echo str_pad('', $buffer - 1);
// отправляем заголовок
header("TAG-A: ". PHP_VERSION);
// ещё байт
echo " ";
// а второй заголовок уже не отправляется, получите ошибку
header("TAG-B: ". PHP_VERSION);
Для CLI
приложений директива output_buffering
всегда 0
,данный буфер отключен.