1. ホーム
  2. php

[解決済み] PHP バッファ ob_flush() vs. flush()

2023-07-22 11:29:20

質問

とはどう違うのでしょうか? ob_flush()flush() の両方を呼び出さなければならないのはなぜですか?

ob_flush() 参照 は言う。

この関数は、出力バッファの内容を送信します(もしあれば)。

flush() 参照 は言う。

PHP と PHP が使用しているバックエンド (CGI, Web サーバーなど) の書き込みバッファをフラッシュします。

しかし、続けてこう書いてあります。

[ウェブサーバのバッファリングスキームを上書きすることはできないかもしれません。

ということは、単に ob_flush() を使えばいいようです。しかし、そうすると、おかしな結果になります。 どなたかわかりやすく説明していただけませんか?

どのように解決するのですか?

ob_flush は、アプリケーション起動のバッファを送信します。複数のネストした ob_start() は、PHP スクリプトの中で複数回入れ子にすることができます。 ob_flush は、現在のコンテンツを上位レイヤーに渡します。

PHP 自身が (自らの判断で) 出力をバッファリングすることがあります。これはバックエンドに依存します。しかし、通常は FastCGI はそれ自体でソケットバッファを持っています。したがって flush() を起動し、現在のコンテンツをウェブサーバに送信する必要があります。

そして今、ウェブサーバはそれ自身が別のバッファリングスキーム ( mod_deflate やコンテンツフィルタ) を実装している場合がありますが、これには何の影響力もありません。しかし、これは特別に設定される必要があるため、めったにありません。

とにかく、両方使ってください。