PHP を SSE (Server Sent Events) および同様のサーバー ストリーミング ソリューションのバックエンドとして使用する場合@ob_flush();@flush()
、データがすぐに吐き出されるようにするためにイディオムを使用しています。(順序は重要ですob_flush()
。PHP のバッファflush()
をフラッシュしてから、Apache にもそれをフラッシュするように指示します。)
@
遅いのを読んだ後、私はそれについて考え始めました。(実際、PHPマニュアルのコメントによると、約0.005ミリ秒追加されるため、「遅い」を「タイトなループ内でない限り心配しないでください」と再分類しました)。出力バッファが空のときに不平を言うのを止めるには、 @
onが必要です。ob_flush()
ところで、ソースコードがApacheに到達するまでソースコードをたどりましたがflush()
、PHPエラーはスローされないようです。
今、私は上記@ob_flush();@flush()
をちょうど@flush()
(またはちょうどflush()
)に減らすことができるかどうか疑問に思っていますか?再び PHP のマニュアル コメントで、スクリプトの先頭でこれを行うことができると誰かが言っているのを見つけました: if (ob_get_level()) ob_end_clean();
(これは単純に と省略できます@ob_end_clean();
)
私の質問は、出力バッファリングが決して使用されob_flush()
ず、必要とされないことを意味する信頼できるコマンドですか? すべての PHP バージョン (少なくとも php 5.2 以降) およびサポートされているすべてのオペレーティング システムで、ユーザーが php.ini に設定した可能性のある奇妙な設定は何ですか?
(答えが「いいえ」の場合は、どのような状況でob_flush()
まだ必要になるかを説明してください。)