0

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

4

1 回答 1

2

也许这就是你要找的东西:http ://www.php.net/manual/en/function.ob-implicit-flush.php

//at start of script...
ob_implicit_flush(true);
ob_end_flush();

返回无缓冲的输出

旁注:您不应该在生产环境中在屏幕上显示 php 错误,因此您不需要使用 @ 错误抑制器。

于 2013-09-06T07:29:31.777 回答