你好,
这只是为了添加一个我一开始没有理解的行为。
ob_get_flush 实际上将缓冲区的内容作为文本返回,但它也会将缓冲区发送回浏览器,以便在用户屏幕上显示。
如果您不希望缓冲区发送到用户,请使用 ob_get_clean
(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ob_get_flush — 刷新(发送)活动输出处理程序的返回值,返回活动输出缓冲区的内容并将其关闭
此函数调用输出处理程序(使用PHP_OUTPUT_HANDLER_FINAL
标志),刷新(发送)其返回值,返回活动输出缓冲区的内容并关闭活动输出缓冲区。
ob_get_flush()在没有使用PHP_OUTPUT_HANDLER_REMOVABLE
标志启动的活动输出缓冲区的情况下将失败。
ob_get_flush()将刷新(发送)输出处理程序的返回值,即使活动输出缓冲区是在没有PHP_OUTPUT_HANDLER_FLUSHABLE
标志的情况下启动的。
此函数没有参数。
成功时返回活动输出缓冲区的内容,失败时返回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_get_flush 实际上将缓冲区的内容作为文本返回,但它也会将缓冲区发送回浏览器,以便在用户屏幕上显示。
如果您不希望缓冲区发送到用户,请使用 ob_get_clean
我不知道这到底是如何工作的,但是如果你调用这个函数,PHP 的行为就像头部已经发送一样(即使输出已经进入字符串)。
这意味着您不能调用此函数,然后例如调用 setcookie。
这是通过反复试验验证的
对之前帖子的更正:ob_get_clean() 更好,即
<?php
// 开始生成 html
$html = '<html><head>'; // 等
// 开始输出缓冲
ob_start();
// 调用立即输出的函数
print_menu();
// 将此追加到 $html 并清空缓冲区
$html .= ob_get_clean();
?>