CakeFest 2024: The Official CakePHP Conference

ob_get_flush

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ob_get_flush 冲刷(发送)活动输出处理程序的返回值,返回活动输出缓冲区的内容并将其关闭

说明

ob_get_flush(): string|false

该函数调用输出处理程序(使用 PHP_OUTPUT_HANDLER_FINAL flag),冲刷(发送)其返回值,返回活动输出缓冲区的内容并关闭活动输出缓冲区。

如果没有以 PHP_OUTPUT_HANDLER_REMOVABLE flag 启动的活动输出缓冲区,ob_get_flush() 将失败。

ob_get_flush() 将冲刷(发送)输出处理程序的返回值,即使活动输出缓冲区是在没有 PHP_OUTPUT_HANDLER_FLUSHABLE flag 的情况下启动的。

参数

此函数没有参数。

返回值

成功时返回活动输出缓冲区的内容,失败时返回 false

错误/异常

如果函数失败生成 E_NOTICE

示例

示例 #1 ob_get_flush() 示例

<?php
// 使用 output_buffering=On
print_r(ob_list_handlers());

// 保存缓冲区到文件
$buffer = ob_get_flush();
file_put_contents('buffer.txt', $buffer);

print_r(ob_list_handlers());
?>

以上示例会输出:

Array
(
    [0] => default output handler
)
Array
(
)

参见

  • ob_start() - 打开输出控制缓冲
  • ob_get_contents() - 返回输出缓冲区的内容
  • ob_flush() - 冲刷(发送)活动输出处理程序的返回值
  • ob_end_flush() - 冲刷(发送)活动输出处理程序的返回值,并关闭活动输出缓冲区
  • ob_get_clean() - 获取活动缓冲区的内容并将其关闭

add a note

User Contributed Notes 4 notes

up
34
info at pcdoctor dot fr
15 years ago
Hi,
this is just to add a behavior that I haven't understud at first place.

ob_get_flush actually returns the content of the buffer as a text but also it sends the buffer back to the browser so that it's displayed on user screen.

Use ob_get_clean if you do not want the buffer to be send to the user
up
-3
taras dot dot dot di at gmail dot com
15 years ago
I don't know how exactly this works, but if you call this function, PHP would behave as if headers have been sent (even though the output has gone to a string).

This means that you can't call this function, and then call setcookie for example.

This was verified by trial and error
up
-6
zubin@byron
18 years ago
I found this function is useful for storing output instead of displaying it. For example, I wanted to use an old function which echoed the ouput but I wanted it in a variable, not outputted immediately. Here's how:

<?php
// start generating html
$html = '<html><head>'; // etc
// start output buffering
ob_start();
// call function which outputs immediately
print_menu();
// append this to $html
$html .= ob_get_flush();
// empty output buffer
ob_clean();
?>
up
-5
zubin@byron
18 years ago
Correction to previous post: ob_get_clean() is better, ie:

<?php
// start generating html
$html = '<html><head>'; // etc
// start output buffering
ob_start();
// call function which outputs immediately
print_menu();
// append this to $html and empty buffer
$html .= ob_get_clean();
?>
To Top