ob_flush()
とflush()
の違いは何ですか?なぜ両方を呼び出す必要がありますか?
ob_flush()
reference の意味:
この関数は、出力バッファーの内容(存在する場合)を送信します。
flush()
reference の意味:
PHPおよびバックエンドPHP=が使用しているもの(CGI、Webサーバーなど)の書き込みバッファをフラッシュします。
しかし、それは言い続けています:
[それは]あなたのウェブサーバーのバッファリングスキームを上書きできないかもしれません…
だから、私は常にob_flush()
を使うことができるように思えます。しかし、そうすると奇妙な結果が得られます。誰かがここで何が起こっているのか簡単な言葉で説明できますか?
ob_flush
は出力バッファをフラッシュしますyoob_start
のような関数で作成されました
flush
は、PHPスクリプト自体の呼び出し元にバッファーされた出力をフラッシュします
ob_flush()
は高レベルのフラッシュです。高レベルバッファをフラッシュし、すべてのコンテンツを低レベルの内部バッファに入れて送信準備を整えます。
ob_
ファミリの関数はstacksのバッファを作成するため、コードが書き込まれた場合、どこでも盲目的にob_flush()
を書き込むだけで「奇妙な結果」が得られることに注意してください。このスタッキングを活用してください。flush()
は低レベルのフラッシュで、PHP内部の低レベルのデータバッファーをフラッシュするように指示します。
その下にも、ソケットレイヤーバッファーがあります。その下には、ネットワーク層バッファーがあります。そして、最低レベルでは、データケーブルを下る電子の列。
これは 前の質問 に関連していると思います。出力バッファリングを使用する重要な利点は、データ圧縮と併用する場合です。 ob_gzhandler
を使用していない場合、得られるものはほとんどありません。 flush
単独では、まだサーバー上にある出力データをコミットします。 ob_start
とそれに対応するob_flush
、ob_end_clean
およびob_end_flush
を使用して、圧縮されるのを待っているもの(参照としてflush
およびob_flush
を見てください)別のバケットに-ob
はflush
にデータを送信し、flush
はブラウザにデータを送信します-正確ではないかもしれませんが、それはアイデアです)、ラップされてクライアントに送信されます。