Как установить имя выходного буфера в php?

Я просматривал документацию для PHP-функции ob_get_status и обнаружил следующее:

Возвращаемые значения:

Если вызывается без параметра full_status или с full_status = FALSE, возвращается простой массив со следующими элементами:

Array (
    [level] => 2
    [type] => 0
    [status] => 0
    [name] => URL-Rewriter
    [del] => 1 
)

Все кажется довольно ясным, однако все интернет-сети, кажется, не могут ответить на один возникший вопрос - как я могу установить имя выходного буфера?

Возможно ли это сделать? Я не могу найти никакой подсказки ни в самой документации, ни где-либо еще. Однако в документации упоминается, что

name = Имя активного обработчика вывода или "обработчик вывода по умолчанию", если ни один не установлен

что в значительной степени подразумевает, что возможно установить это как-то.

Ребята, у вас есть идеи, если это можно сделать? Любая помощь будет очень признательна.

3 ответа

Решение

Используя ob_start Вы можете включить буферизацию вывода в PHP,

Обратите внимание, что функция имеет такую ​​подпись:

bool ob_start ([callable $ output_callback = NULL [, int $ chunk_size = 0 [, int $ flags = PHP_OUTPUT_HANDLER_STDFLAGS]]])

Вы можете передать именованную функцию в качестве допустимого обратного вызова.

Например:

<?php

function test_handler($a) {
    return $a;
}

ob_start('test_handler');

var_dump(ob_get_status());

Дам тебе:

array(7) {
  ["name"]=>
  string(12) "test_handler"
  ["type"]=>
  int(1)
  ["flags"]=>
  int(113)
  ["level"]=>
  int(0)
  ["chunk_size"]=>
  int(0)
  ["buffer_size"]=>
  int(16384)
  ["buffer_used"]=>
  int(0)
}

Вы не можете установить имя. Он печатает имя обратного вызова.

Если ваш обратный вызов является функцией с именем foo_bar:

[name] => "foo_bar"

Если ваш обратный вызов является методом foo_bar класса Acme:

[name] => "Acme::foo_bar"

Если ваш обратный вызов является анонимной функцией:

[name] => "Closure::__invoke"

Имя, которое вы устанавливаете в буфере вывода, является именем обработчика вывода, который вызывается при его сбросе.

Например

ob_start('my_buffer');


function my_buffer($buff){
    return str_replace(":)","<img src=\"smiley\"/>",$buff);
}
Другие вопросы по тегам