【问题标题】:PHP How to get cumulative HTML output of sever without ob_start() [duplicate]PHP如何在没有ob_start()的情况下获得服务器的累积HTML输出[重复]
【发布时间】:2020-11-11 01:42:11
【问题描述】:

服务器在会话中加载运行和退出的各种模块,直到输出到客户端。 我的课程是一个流行的帮助台系统的插件,我无权修改其他系统文件以启用 ob_start()。

  • 模块 #1
  • 模块 #2
  • 模块 #3
  • 模块 #4
  • 模块 #5

我的班级需要之前模块积累的HTML,稍后会发送给客户端。

ob_start() 在我的情况下不是很有用,因为我必须去修改链上的一些模块并添加 ob_start();在它开始之前。我们必须记住,我只能在我的模块内工作

【问题讨论】:

  • 您想要output buffering,请参阅手册中的示例。另请阅读:What is output buffering?.
  • 这能回答你的问题吗? What is output buffering?
  • 在我的情况下不是很有用,因为我必须去修改链上的一些模块并添加 ob_start();在它开始之前。我们必须记住,我只能在我的模块内工作。
  • 假设其他模块不摆弄输出缓冲区,你不能在源头打开输出缓冲(= 调用所有这些模块的任何东西)?或者,您是说除了您自己的模块之外,您无法控制任何东西? 我看到你更新了问题,只是这么说。在这种情况下,这个问题不是重复的,可以重新打开。
  • 换句话说,这不是在你自己的服务器上运行——而是你提供了一个模块,其他人将在他们自己的服务器上使用并安装主应用程序,因此你无法控制?

标签: php


【解决方案1】:

我想你会对“输出缓冲”感兴趣,here 是一个指向 PHP 文档的链接。


    // Start buffering the output
    ob_start();

    //... do a bunch of stuff, which will generate output
    // require/include any additional scripts too

    /**

       $output will contain all content which was outputted
       
    */
    $output = ob_get_clean();

    echo $output;// send the content to stdout... to the browser.


【讨论】:

  • 在我的情况下不是很有用,因为我必须去修改链上的一些模块并添加 ob_start();在它开始之前。我们必须记住,我只能在我的模块内工作。
  • 所以您想在模块运行之前捕获已经发送到浏览器的内容?
  • 我不建议这样做,除非你的模块只会在你的项目上运行,因为它会非常侵入。假设模块在使用之前被加载,例如 composer 的情况,您可以通过在加载模块时启动输出缓冲来劫持整个请求......它不会影响其他模块的功能,但可能会改变请求的输出行为...
  • 你用的是什么帮助系统?
  • 我查看了 osTicket 的源代码,我可能弄错了,我没有安装源代码或测试它,但是如果您的模块与系统的其余部分一起引导,您可以开始输出在插件的引导函数中缓冲...然后在您的模块中捕获输出并随意处理/检查它,您只需要确保最终将其转储到浏览器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多