PHP如何在没有ob_start()的情况下获得服务器的累积HTML输出[重复]

Posted

技术标签:

【中文标题】PHP如何在没有ob_start()的情况下获得服务器的累积HTML输出[重复]【英文标题】:PHP How to get cumulative HTML output of sever without ob_start() [duplicate] 【发布时间】: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();在它开始之前。我们必须记住,我只能在我的模块内工作。 假设其他模块不摆弄输出缓冲区,你不能在源头打开输出缓冲(= 调用所有这些模块的任何东西)?或者,您是说除了您自己的模块之外,您无法控制任何东西? 我看到你更新了问题,只是这么说。在这种情况下,这个问题不是重复的,可以重新打开。 换句话说,这不是在你自己的服务器上运行——而是你提供了一个模块,其他人将在他们自己的服务器上使用并安装主应用程序,因此你无法控制? 【参考方案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 的源代码,我可能弄错了,我没有安装源代码或测试它,但是如果您的模块与系统的其余部分一起引导,您可以开始输出在插件的引导函数中缓冲...然后在您的模块中捕获输出并随意处理/检查它,您只需要确保最终将其转储到浏览器。

以上是关于PHP如何在没有ob_start()的情况下获得服务器的累积HTML输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有斜杠的情况下访问目录的 index.php 并且不获得 301 重定向

php ob缓存机制

如何使用 ob_start 追加到文件

php 如何在php中使用ob_start()

PHP中的ob_start用法详解

php中ob_start()有啥用?