PHP 输出控制函数

PHP ob_start() 函数用于打开输出缓冲。当输出缓冲处于活动状态时,脚本不会发送任何输出(标头除外),而是将输出存储在内部缓冲区中。

可以将回调函数传递给ob_start()函数,可以在缓冲区内容从缓冲区中刷新之前对其进行处理。标志参数flags可用于允许或限制缓冲区能够执行的操作。

可以使用 ob_get_contents() 函数访问该内部缓冲区的内容。要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另一方面,ob_end_clean()函数可用于静默丢弃缓冲区内容。

输出缓冲区是可堆叠的,这意味着可以在另一个 ob_start() 处于活动状态时调用 ob_start()。只需确保 ob_end_flush() 函数被调用适当的次数即可。如果多个输出回调函数处于活动状态,则输出将按嵌套顺序依次过滤。

如果脚本结束时输出缓冲仍然处于活动状态,PHP 会自动输出内容。

语法

ob_start(callback, chunk_size, flags) 

参数

callback

可选。 一个回调函数,用于在缓冲区内容从缓冲区中刷新之前对其进行处理。如果callback不是可调用函数,则该函数将返回 false。如果回调返回 false,则原始输入将发送到浏览器。回调函数应具有以下参数:

handler(buffer, phase) 
注意: ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush()ob_start() 不应从此回调函数中调用,以避免未定义行为。不应从此回调函数调用诸如print_r($expression, true)highlight_file($filename, true)之类的输出缓冲函数。
chunk_size可选。 如果提供,则在任何导致缓冲区长度等于或超过 chunk_size 的输出调用后都会刷新缓冲区。默认值为 0,这意味着仅当输出缓冲区关闭时才会调用输出函数。
falgs

可选。 它是一个位掩码,控制可以在输出缓冲区上执行的操作。默认值为 PHP_OUTPUT_HANDLER_STDFLAGS,它允许清理、刷新和删除输出缓冲区。 PHP_OUTPUT_HANDLER_STDFLAGS也可以通过将下面提到的所有标志控件进行或运算来实现。

每个标志控制对一组函数的访问,如下所述:

返回值

成功时返回 true,失败时返回 false。

示例:将用户定义函数与 ob_start() 一起使用

在下面的示例中,创建名为 myfunc 的用户定义函数,它将缓冲区字符串中存在的搜索数组的每个元素替换为替换数组的相应元素。

<?php
function myfunc($buffer) {
  //替换搜索数组的每个元素
  //缓冲区中存在的内容将被替换
  //通过替换数组的相应元素。
  $search = ['fox', 'dog', 'brown'];
  $replace = ['wolf', 'cat', 'black'];

  return (str_replace($search, $replace, $buffer));
}

ob_start("myfunc");
?>

<html>
<body>
<p>The quick brown fox jumps over the lazy dog.</p>
</body>
</html>

<?php
ob_end_flush();
?> 

上述代码的输出将是:

<html>
<body>
<p>The quick black wolf jumps over the lazy cat.</p>
</body>
</html> 

示例:创建不可擦除的输出缓冲区

再考虑一个示例,它解释了如何创建不可擦除的输出缓冲区。

<?php
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);
?>