如何在 php 中设置输出缓冲区名称?

How can I set an output buffer name in php?

我浏览了 PHP 的 ob_get_status 函数的文档,发现了以下内容:

Return Values:

If called without the full_status parameter or with full_status = FALSE a simple array with the following elements is returned:

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

一切似乎都很清楚,但是所有的互联网似乎都无法回答出现的一个问题 - 如何设置输出缓冲区的名称?

甚至可以做到吗?我在文档本身或其他任何地方都找不到任何线索。 但是文档提到

name = Name of active output handler or ' default output handler' if none is set

这几乎暗示可以以某种方式设置它。

你们知道这是否可以做到吗?任何帮助将不胜感激。

您在输出缓冲区上设置的名称是刷新时调用的输出处理程序的名称。

例如

ob_start('my_buffer');


function my_buffer($buff){
    return str_replace(":)","<img src=\"smiley\"/>",$buff);
}

您无法设置名称。它打印回调的名称。

如果您的回调函数名为 foo_bar:

[name] => "foo_bar"

如果您的回调是 foo_bar 的方法 class Acme:

[name] => "Acme::foo_bar"

如果您的回调是匿名函数:

[name] => "Closure::__invoke"

通过使用 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)
}