当使用 PHP 作为 SSE(服务器发送事件)和类似服务器流解决方案的后端时,我一直在使用这个@ob_flush();@flush()
习惯用法来确保数据立即被吐出。(顺序很重要:ob_flush()
刷新 PHP 的缓冲区,flush()
然后告诉 Apache 也刷新它。)
读完之后我开始思考它@
很慢。(事实上,根据 PHP 手册中的评论,它增加了大约 0.005 毫秒,所以我将“慢”重新分类为“除非在紧密循环中,否则不要担心”)。当输出缓冲区为空时,我需要@
打开ob_flush()
它来停止抱怨。顺便说一句,我一直在跟踪源代码,直到它到达 Apache 并且它似乎flush()
不会引发任何 PHP 错误。
现在我想知道我是否可以将上述内容减少@ob_flush();@flush()
到只是@flush()
(甚至只是flush()
)?再次在 PHP 手动注释中,我发现有人说您可以在脚本顶部执行此操作:(if (ob_get_level()) ob_end_clean();
可以缩写为 simple @ob_end_clean();
)
我的问题是:这是一个可靠的命令来表示永远不会使用并且ob_flush()
永远不需要输出缓冲吗?在所有 PHP 版本(至少是 php 5.2 及以上)和所有受支持的操作系统中,用户可能在 php.ini 中设置了什么奇怪的设置?
(如果您的回答是“否”,请描述在哪些情况下ob_flush()
仍需要。)