(PHP 4, PHP 5, PHP 7, PHP 8)
ob_start — 打开输出控制缓冲
$callback
= null
, int $chunk_size
= 0, int $flags
= PHP_OUTPUT_HANDLER_STDFLAGS
): bool此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容,相反需要输出的内容被存储在内部缓冲区中。参阅缓冲什么输出?以了解哪些输出受到影响。
输出缓冲区是可堆叠的,也就是说,当一个缓冲区处于活动状态时也可以调用 ob_start()。如果有多重输出缓冲区是活跃的,输出内容会一直按嵌套的顺序依次过滤。参阅嵌套输出缓冲区获取更多详情。
有关输出缓冲区的详细信息,请参阅用户级别输出缓冲区
callback
可以指定可选的 callback
callable。也可以通过传递 null
来绕过它。
当冲刷(发送)、清理输出缓冲区或在脚本末尾冲刷输出缓冲区时,将调用 callback
。
callback
的签名如下:
buffer
phase
PHP_OUTPUT_HANDLER_*
常量。PHP_OUTPUT_HANDLER_*
常量的位掩码。有关更多详细信息,请参阅传递给输出处理程序的 flag。
如果 callback
返回 false
,则返回缓冲区的内容。有关更多详细信息,请参阅 输出处理程序的返回值。
从输出处理程序中调用以下任何函数都将导致 fatal 错误 ob_clean()、ob_end_clean()、ob_end_flush()、ob_flush()、ob_get_clean()、ob_get_flush()、ob_start()。
chunk_size
如果传递了可选参数 chunk_size,则在任何导致缓冲区长度等于或大于 chunk_size
的代码块的输出之后,都会冲刷缓冲区。默认值 0
表示缓冲所有输出,直到缓冲区关闭。更多详细信息,请参阅缓冲区大小。
flags
flags
参数是位掩码,用于控制可以在输出缓冲区上执行的操作。默认是允许清理、冲刷和移除输出缓冲区,可以通过缓冲区控制 flag手动设置。参阅缓冲区中允许的操作获取更多详细信息。
每个标志都控制着对一组功能的访问,详细介绍如下:
常量 | 函数 |
---|---|
PHP_OUTPUT_HANDLER_CLEANABLE |
ob_clean() |
PHP_OUTPUT_HANDLER_FLUSHABLE |
ob_flush() |
PHP_OUTPUT_HANDLER_REMOVABLE |
ob_end_clean()、ob_end_flush()、ob_get_clean()、ob_get_flush() |
示例 #1 用户自定义回调函数的示例
<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>
以上示例会输出:
<html> <body> <p>It's like comparing oranges to oranges.</p> </body> </html>
示例 #2 创建不可擦除的输出缓冲区
<?php
ob_start(null, 0, PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_REMOVABLE);
?>