phpob_start()修复了以前输出的标记


php ob_start() fix previously outputted tags

我最近刚开始玩输出缓冲,似乎遇到了障碍。我的网站使用了一个加载html页眉/页脚和正确内容模板的模板系统。问题是html标题是在加载的第一个模板中设置的。因此,当(如果)加载另一个包含标头(存储在字符串$headers中)的模板时,它不会将它们添加到标头中。我创造了一种非常草率的方式来做这件事,我正在寻找更好地处理这件事的建议。

index.php

    ob_start('ob_html_headers');

回调函数

    function ob_html_headers($buffer)
    {
        global $headers;
        return str_replace('</head>', $headers.'</head>', $buffer);
    }

感谢您的帮助。

嗯,有趣的问题。如果你想做我认为你是什么样的人,你可能最好建立每个部分要发送的数据,然后回声就结束了。如果不想将所有echo转换为$str=,则可以嵌套ob_start还没有。

基本上,您似乎想做的是允许稍后的信息影响早期的输出,最好的方法是构建一个表示页面的结构(不要担心,几个字符串数组就足够了),然后在知道所有东西都需要去哪里时在最后"渲染"它。

我不明白为什么在模板中存储"headers"。

据我所知,模板中使用的任何动态值都必须在业务逻辑部分中定义(并且很可能取自数据库)。

这样你就不会遇到这样的问题。