代码之家  ›  专栏  ›  技术社区  ›  AlexV

在PHP中不使用任何参数使用ob-start有什么意义?

  •  1
  • AlexV  · 技术社区  · 14 年前

    我可以看到 ob_start output_callback 参数集,但我看不到 ob_start 调用它时完全不设置任何参数。

    禁用输出以稍后一次抛出所有输出有什么意义?这不会使用更多的内存(服务器端)和慢速下载(客户端),因为只有在页面完全呈现(或 ob_end_flush 被称为?

    ob_start();
    for ($i = 1; $i <= 15; $i++)
    {
        echo $i, ' ';
        sleep(1);
    }
    ob_end_flush();
    

    任何人都可以给我使用的好处 ob_start() 没有设置任何参数(如上面的代码片段)。

    4 回复  |  直到 14 年前
        1
  •  4
  •   ircmaxell    14 年前

    其中一个原因是“抓取”了一小段代码的输出。

    所以,假设您有一段独立的代码要执行,但不希望直接输出。你能做的是

    ob_start();
    include 'file.php';
    $output = ob_get_clean();
    

    我给你举个现实世界的例子。假设您正在为应用程序构建安装程序。作为安装程序的一部分,您希望显示当前的PHP信息(来自 phpinfo() )但是,您希望将该信息与页面的其余部分集成(而不是使用框架)。所以,你能做的就是获取 PHP() 使用输出缓冲区,修改它,然后在模板文件中显示它。

    ob_start();
    phpinfo();
    $info = ob_get_clean();
    //Massage the output, remove the doctype, html, head, and body tags
    echo $info;
    

    我也用它来查看文件。在视图类中, __toString() 方法实际呈现视图。但自从 α- toSTRIN() 期望返回一个字符串而不是回送它,我使用输出缓冲来捕获模板并返回它…

        2
  •  2
  •   Bill Karwin    14 年前

    如果您有一个使用echo输出大量小片段的PHP脚本,那么如果使用 ob_start() 当你做完后把它冲洗干净。

    (注意:这是由PHP核心开发人员在博客上发布的报告提供的;我没有亲自测试过,因此没有针对 多少钱? 更快。

    是的,它将缓冲区保存在内存中,但是您的HTML输出有多大?与PHP环境的内存限制相比,可能非常小。

    是的,它会将输出延迟到完成为止,但是由于PHP运行得更快,所以总运行时间会更低。Apache线程越快可以转到另一个请求,对站点的可伸缩性就越好。

    这并不是说每个页面都能从使用输出缓冲中获益。在典型的PHP脚本中,这种好处可能是微不足道的,它主要是静态HTML,包含一些变量元素。

        3
  •  1
  •   Ivar Bonsaksen    14 年前

    一种用法是在脚本准备好发送其内容之前阻止PHP发送头,因为这样可以在构建输出时更改头。

    阅读这篇文章是关于输出缓冲的,以获得更多关于如何使用它的想法。 http://www.devshed.com/c/a/PHP/Output-Buffering-With-PHP/

        4
  •  0
  •   MrSoundless    14 年前
    1. 确保没有出现“headers already sent”错误
    2. 捕获所有HTML数据以创建缓存文件

    我只会用它2,因为我认为1无论如何都不应该发生。

    推荐文章