我在“登录”文件的开头有ob_start();
,一切正常。我可以注册,登录并注销。
但是,我的代码中没有ob_end_flush();
,没有它就可以正常工作。当我把它放在我的代码中(在session_destroy();
后面的注销文件中)时,它会使注销过程慢得多。
有经验的人可以告诉我更多关于这个ob_end_flush();
以及为什么有必要吗?
答案 0 :(得分:1)
ob_start和ob_end_flush用于捕获输出缓冲区,以便echos
等仅在您需要时输出。
当您的网页可能有{或{}}}时,这通常很方便。由于您无法在之后发送session_start 所需的标题,因此您输出了其他内容。
通过控制输出缓冲区何时发送到客户端,您可以延迟发送,直到您确定已发送所需的任何标头。
有些人可能会说良好的软件架构和设计意味着你不需要缓冲来覆盖这种情况 - 但这是意见,而且还有很多其他的例子,无论如何这都是有意义的。
但是,无论是否“结束”,输出缓冲区仍会在进程结束时刷新。
这意味着如果您从session_start
开始,但从不ob_start
,则仍应刷新输出。
答案 1 :(得分:0)
有时您不希望所有内容都被缓冲。例如:
ob_start(function($c) {
return "<img src=\"data:image/png;base64,".base64_encode($c)."\" />";
});
imagepng($someimage);
ob_end_flush();