php – 当我使用多个ob_start()没有ob_end_clean()或ob_end_flush()时发生了什么?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 当我使用多个ob_start()没有ob_end_clean()或ob_end_flush()时发生了什么?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了关于ob_start()ob_end_clean()ob_end_flush()的PHP手册.我已经看到了一个不同的例子,无论如何我修改了这个例子,但我在这一点感到困惑.这是脚本.
ob_start();
echo "Hello x,";

ob_start();
echo "Hello y,";

ob_start();
echo "Hello z,";

ob_start();
echo "Hello World";
$ob_2 = ob_get_contents();
ob_end_clean();

echo "Galaxy";
$ob_1 = ob_get_contents();
ob_end_clean();

echo " this is OB_1 : ".$ob_1;
echo "<br>  and this is OB_2  : ".$ob_2;

此脚本的输出是:

你好,你好,这是OB_1:你好z,银河

这是OB_2:Hello World

——————————————–

为什么输出不是这样的?

这是OB_1:你好,你好z,银河

这是OB_2:Hello World

我错过了什么?

输出缓冲区像堆栈一样工作.您创建一个缓冲区并在其中回显“Hello x”,然后创建另一个缓冲区,并将“Hello y”回显到其中,然后创建一个第三个缓冲区并将“Hello z”回显到其中. “Hello World”进入第四个缓冲区,通过调用ob_end_clean()关闭,所以你回到第三个缓冲区.当您在回应“Galaxy”之后调用ob_get_contents()时,您将获得第三个缓冲区的内容.

如果在本代码末尾再次调用ob_get_contents(),您将得到第二个缓冲区中的“Hello y”.如果您再次ob_end_close()然后ob_get_contents(),您将从第一个缓冲区获取“Hello x”.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 当我使用多个ob_start()没有ob_end_clean()或ob_end_flush()时发生了什么?全部内容,希望文章能够帮你解决php – 当我使用多个ob_start()没有ob_end_clean()或ob_end_flush()时发生了什么?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。