2016-06-20 25 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"