Как установить имя выходного буфера в 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);
}