当使用 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()仍需要。)