Подтвердить что ты не робот

Как определить пользователя 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() должен быть тем, что мне нужно, но что это лучший способ использовать его при тестировании для этого?

4b9b3361

Ответ 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();