まず PHP の出力順序を明確にします
1. PHP 出力キャッシュをオンにします:echo,print -> ブラウザ バッファリング ->display2 .php 出力キャッシュがオンになっていません:
echo,print -> サーバー バッファリング -> ブラウザ バッファリング -> ブラウザの出力キャッシュも明確にします: IE は 256 バイト、Chrome と FireFox は 1000 バイトです。データが到達すると、ブラウザはこの長さまたはスクリプトの終了後にのみページにデータを出力します
いくつかの PHP 設定と使用される API について話しましょう:
1.php.ini の output_buffering 設定
•Off: を意味します。 PHP 出力キャッシュをオフにする
•オン: 無限の出力キャッシュを開きます
•4096: サイズ 4096Byte の出力キャッシュを開きます
2.php.ini implicit_flush 設定
•オン: 各出力 (エコー、 print)flush() 関数を自動的に呼び出した後、直接出力します•Off: On とは対照的に、各出力後に flash() は呼び出されません。サーバーのバッファリングがいっぱいになるまで出力されませんが、有効にしていなくても問題ありません。より柔軟です
3.
ob_flush
() 関数: PHP のバッファリングからデータを取り出し、サーバーのバッファリングに置きます4.flush() 関数: サーバーのバッファリングからデータを取り出し、ブラウザのバッファリングに入れます
5.ob_start
() 関数:この関数については、今はあまり明確にはわかりません。これがオンになっていると、たとえ ob_flush() と flash() が使用されていても、出力は ob_flush() によって制御されません。現時点でわかっているのは、output_buffering=Off であっても、データをブラウザ上ですぐに出力できないということです。 ob_start()を使うと出力データはキャッシュできないし、output_buffering=Onだとob_start()を使わなくても出力データはPHPでもキャッシュできるので、ob_startは無駄だと思うので勝ちました今は気にしないでくださいそれではコードを見てみましょう(output_buffering=4096, implicit_flush=Offに設定)
'; ob_flush(); flush(); sleep(1); } ?>
マニュアルの ob_flush/flush の説明は出力バッファをリフレッシュするものですが、併用する必要があるため、混乱を招く方も多いと思います…
実際、場合によっては、flush は PHP 自体の出力バッファを操作します
。そしてフラッシュは、厳密に言えば、PHP が Apache のモジュール
関数ポインター
を呼び出すことで、間接的に Apache の API を呼び出します。 ap_rflush は、Apache の出力バッファを更新します。 もちろん、マニュアルには、Apache の他のモジュールもあるとも記載されています。このアクションの結果を変更します。1. mod_gzip などの一部の Apache モジュールは、それ自体で出力キャッシュを実行する場合があります。
2. これにより、flush() 関数によって生成された結果がクライアントのブラウザーにすぐに送信されなくなります。3.
4. ブラウザでも受信したコンテンツを表示する前にキャッシュします。たとえば、Netscape5. ブラウザは改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、タグを受け取るまでテーブル全体は表示されません。7.8. Microsoft Internet Explorer の一部のバージョンは、256 バイトを受信した後でのみページの表示を開始するため、これらのブラウザーがページのコンテンツを表示できるようにするには、いくつかの追加のスペースを送信する必要があります。
したがって、この 2 つを使用する正しい順序は、最初に ob_flush、次にフラッシュです。もちろん、他の sapi では、flush を呼び出すことはできませんが、コードの移植性を確保するために、これらを使用することをお勧めします。一緒に
以上がPHP出力キャッシュに基づくoutput_buffering例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。