4

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

返回值:

如果在没有full_status参数或full_status = FALSE的情况下调用,则返回一个包含以下元素的简单数组:

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

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

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

name = 活动输出处理程序的名称,如果未设置,则为“默认输出处理程序”

这几乎意味着可以以某种方式设置它。

你们有什么想法可以做到吗?任何帮助将不胜感激。

4

3 回答 3

2

通过使用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)
}
于 2016-06-20T13:13:40.687 回答
2

您不能设置名称。它打印回调的名称。

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

[name] => "foo_bar"

如果您的回调是类Acme的方法foo_bar

[name] => "Acme::foo_bar"

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

[name] => "Closure::__invoke"
于 2016-06-20T13:10:56.913 回答
1

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

例如

ob_start('my_buffer');


function my_buffer($buff){
    return str_replace(":)","<img src=\"smiley\"/>",$buff);
}
于 2016-06-20T13:08:39.413 回答