【问题标题】:Output Buffer and die() / exit() function?输出缓冲区和 die() / exit() 函数?
【发布时间】:2011-06-01 09:22:53
【问题描述】:

希望大家的假期都过得好。

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

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

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

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

【问题讨论】:

  • @user509006 - 没有任何现有代码就无法猜测...

标签: php exit output-buffering coding-style


【解决方案1】:

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

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

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

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

【讨论】:

  • 我已经有一个函数,但是之前的 ob_flush() 是我需要让它立即退出的!非常感谢!
【解决方案2】:

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

至于问题的另一部分,正如 Patrick 所说,ob_flush 是一个很好的解决方案。

【讨论】:

    猜你喜欢
    • 2014-10-08
    • 2022-09-23
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多