2016-06-20 76 views
3

我已浏览了PHP的ob_get_status函数的文档,发现如下:如何在php中设置输出缓冲区名称?

返回值:

如果叫不full_status参数或full_status = FALSE带有以下元素的简单阵列将返回:

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

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

它甚至有可能做到这一点?我没有在文档本身或其他地方找到任何线索。 然而,文档中提到

名=有效输出处理器或“默认的输出处理程序”如果 没有设置

这几乎意味着有可能以某种方式把它的名称。

你们有什么想法,如果这可以做到?任何帮助将大大受到重视。

+0

你真的不能设置一个名称。 'name'将等于处理输出缓冲的函数名称,例如, 'mb_output_handler'。 http://php.net/mb_output_handler –

回答

1

通过使用ob_start您可以打开PHP中的输出缓冲。

注意,函数具有这样的签名:

布尔ob_start([可调用$ output_callback = NULL [摘要$ CHUNK_SIZE = 0 [摘要$标志= 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) 
} 
1

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

ob_start('my_buffer'); 


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

谢谢,这是有效的。我想知道为什么在文档中没有提到这一点。 – Kalko

1

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

如果你的回调是一个叫foo_bar这样功能:

[name] => "foo_bar" 

如果你的回调是方法一类foo_bar这样阿克米

[name] => "Acme::foo_bar" 

如果你的回调是一个匿名功能:

[name] => "Closure::__invoke"