输出缓冲区和die()/ exit()函数?

时间:2010-12-30 04:16:15

标签: php exit output-buffering coding-style

我希望每个人的假期都很顺利。

这里有另一个与PHP相关的问题。我在我的脚本中使用输出缓冲区,因为我最近学到的是一个无效的原因(所以我可以在后面的脚本中传递头文件)。我现在意识到我应该将所有输出存储在变量或其他类型的存储中,直到我准备在脚本结束时输出而不是使用输出缓冲区。不幸的是,我已经将这些函数和html的自发输出编码到我的页面中了。我希望能够在脚本的第2版中修复此问题,因为我有严格的截止日期来满足此版本。

对手头的问题。我打算这样做,但显然die()和exit()函数对输出缓冲区效果不佳?我在所有错误消息之后都有exit(),而不是在那时结束执行,似乎脚本由于输出缓冲而继续运行。我已经通过删除输出缓冲区和exit()函数按预期工作来测试这个假设。

有没有办法改变这种行为,还是应该回到绘图板并开始更换我的旧页面?另外,有人可以向我解释为什么我们应该保持输出直到最后?我总是对学习感兴趣。

先谢谢大家!享受2010年的最后几天!

2 个答案:

答案 0 :(得分:1)

虽然我会将更多更抽象的问题留给比我更聪明的头脑,但我建议您创建一个包装器exit()函数,以便在出现错误时简化代码。 即 -

if(!$good)
{
    trigger_error('bleh', E_USER_WARNING);
    errorExit();
}

function errorExit()
{
    ob_flush();
    exit();
}

并用该函数调用替换所有出口,这样刷新缓冲区,程序将在适当的时间退出。

答案 1 :(得分:1)

标题与实际页面内容之间的差异基本上只是它们出现的位置。 顾名思义,标题位于输出的开头。之后,发送两个回车/输入(输入符号),之后的所有内容都被认为是内容。 因此,如果您回显某些内容然后想要更改标题,则无法完成。内容部分已经关闭标题部分。您将以新标题发送的内容现在显示为纯文本(如果PHP解释器不会阻止您,它会这样做。)

至于问题的其他部分,ob_flush是帕特里克所说的一个很好的解决方案。