你好,
这只是为了添加一个我一开始没有理解的行为。
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 例如。
这是通过反复试验验证的
我发现此函数对存储输出而不是显示输出很有用。例如,我想使用一个旧的函数,该函数会回显输出,但我希望它在变量中,而不是立即输出。以下是操作方法
<?php
// 开始生成 html
$html = '<html><head>'; // 等等
// 开始输出缓冲
ob_start();
// 调用立即输出的函数
print_menu();
// 将此附加到 $html
$html .= ob_get_flush();
// 清空输出缓冲区
ob_clean();
?>
对上一篇文章的更正:ob_get_clean() 更好,即
<?php
// 开始生成 html
$html = '<html><head>'; // 等等
// 开始输出缓冲
ob_start();
// 调用立即输出的函数
print_menu();
// 将此附加到 $html 并清空缓冲区
$html .= ob_get_clean();
?>