Как определить пользователя ob_start(); уже вызвано
Я использую буферизацию вывода для сжатия gzip и доступ к тому, что было выпущено раньше в PHP script:
if(!ob_start("ob_gzhandler")) ob_start();
Теперь, если этот script будет включен в другой script, где ob_start() уже используется, я получаю предупреждение:
Предупреждение: ob_start() [ref.outcontrol]: обработчик вывода 'ob_gzhandler' не может использоваться дважды в имени файла в строке n
Итак, я бы хотел проверить, что ob_start()
уже вызван. Я думаю, ob_get_status()
должен быть тем, что мне нужно, но что это лучший способ использовать его при тестировании для этого?
Ответы
Ответ 1
ob_get_level
возвращает количество активных обработчиков управления выходом и ob_list_handlers
возвращает лифт этих обработчиков. Поэтому вы можете сделать это:
if (!in_array('ob_gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
} else {
ob_start();
}
Хотя в общем случае вы можете вызвать ob_start
сколько угодно раз, используя ob_gzhandler
, поскольку обработчик не может, поскольку вы сжимаете уже сжатые данные.
Ответ 2
if (ob_get_level())
echo "ob already started";
Ответ 3
Общие:
if (ob_get_status()) {
// ob started
}
Более конкретный
$status = ob_get_status();
if ($status['name']=='ob_gzhandler') {
// ob named ob_gzhandler started
}
Ответ 4
Как его использовать таким образом?
if (ob_get_level() == 0) ob_start();