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

时间:2016-06-20 13:02:16

标签: php output-buffering missing-features

我一直在浏览PHP的 ob_get_status 功能的文档,并发现了以下内容:

  

返回值:

     

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

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

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

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

  

name =活动输出处理程序的名称或'默认输出处理程序'如果   没有设置

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

你们有任何想法是否可以做到这一点?任何帮助都会受到很大的帮助。

3 个答案:

答案 0 :(得分:2)

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

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

$fields = array();
foreach ($this->input->post('fields') as $selectedOption){
            echo $str= $selectedOption."\n";
            $this->load->model('custom_field', '', TRUE);   
            $recordDetails = $this->custom_field->getRecordDetails($str);
            $result = json_decode(json_encode($recordDetails[0]), true);
            $fields['columnName'] = array(
                  'type' => $result['fieldType'],
                   'constraint' => $result['fieldLimit']
                );
}

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

[name] => "foo_bar"

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

[name] => "Acme::foo_bar"

答案 1 :(得分: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)
}

答案 2 :(得分:1)

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

例如

ob_start('my_buffer');


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