-
- for($i=0; $i<10; $i++){
- echo $i.'
'
- sleep(2)}
- ?>
-
-
コードをコピーします
実行結果: データがバッファーのサイズに達していないため、すべてのスクリプトが完了するまで出力は出力されません。
例 2、output_buffering=4096、出力するデータを少なくします (バッファー 1 つ未満)、output_buffering をオフにし、php.ini の Output_buffering=0 を変更します。
for($i=0; $i<10; $i++){ - echo $i.str_repeat(" ",500).'
' / / 256 (またはそれ以上) バイトを受信するまでページは表示されないため、これらのブラウザーがページのコンテンツを表示できるようにするには、追加のスペースを送信する必要があります。 - flash();
- sleep(1);
-
-
- コードをコピー
-
-
PHP バッファリングが無効になっているため、出力する前にスクリプトの実行を待つ必要がなく、データは PHP バッファーに残らず、断続的な出力が表示されます。
エコー -> TCPバッファ -> ブラウザ
例 3、output_buffering=4096 の場合、ob_start() を使用せずに、より大きなデータ (1 つのバッファーを超える) を出力します。
for($i=0; $i<10; $i++){ echo file_get_contents('f.txt').$i.' '; (1); } - ?> コードをコピーします
-
-
- 結果を実行します。
f.txt は 4kb を超えるファイルです。デフォルトのバッファ値より大きく、バッファ容量が足りないため、バッファがいっぱいになるたびに出力され、断続的に出力されます。
-
- 例 4、output_buffering=4096 の場合、より大きなデータ (1 つのバッファーより大きい) を出力するには、ob_start() を使用します。
-
-
ob_start(); for($i=0; $i<10; $i++){ echo file_get_contents('f.txt').$i.' sleep(1); ?> コードをコピーします
ob_start()を使用しているためバッファに十分な容量が設定されており、スクリプト実行まで保存され出力されます。 -
- output_buffering メソッド
1.ob_start
Output_buffering メカニズムを有効にします。有効にすると、スクリプトはブラウザに直接出力されなくなり、一時的に PHP バッファリング領域に書き込まれます。スクリプトの実行が完了するまで送信されません。
-
- 2.ob_get_contents
php バッファリングでデータを取得します。 注: ob_end_clean() の前に呼び出す必要があります。そうしないと、null 文字のみが取得されます。
-
- 3.ob_end_flush と ob_end_clean
ob_end_flush は php バッファリングにデータを出力しますが、クリアしません。
ob_end_clean は出力せず、php バッファリング内のデータをクリアするだけです。
-
- 注:
マニュアルの ob_flush/flush の説明はすべて出力バッファをリフレッシュするため、一緒に使用する必要があります。
実際、これら 2 つは異なるオブジェクトに対して動作する場合があります。場合によっては、flush は何も実行しません。
-
ob_* 系関数は、PHP 自体の出力バッファを操作します。
したがって、ob_flush は PHP 自体のバッファをフラッシュします。
そして厳密に言えば、これは PHP が Apache モジュール (ハンドラーまたはフィルター) としてインストールされている場合にのみ実際に効果があります。
これは、WebServer (特に Apache と考えることができます) を更新するバッファです。
Apache モジュールの sapi の下で、flush は、sapi_module のフラッシュ メンバー関数ポインターを呼び出すことによって、間接的に Apache の API を呼び出します。ap_rflush は、Apache の出力バッファーをリフレッシュします。
mod_gzip などの一部の Apache モジュールは、独自の出力をキャッシュする場合があり、これにより、flush() 関数によって生成された結果がクライアントのブラウザーにすぐに送信されなくなります。
ブラウザでも、受信したコンテンツを表示する前にキャッシュします。
たとえば、Netscape ブラウザは改行または HTML タグの先頭を受け取るまでコンテンツをキャッシュし、 タグを受け取るまでテーブル全体を表示しません。
Microsoft Internet Explorer の一部のバージョンでは、256 バイトを受信した後にのみページの表示が開始されるため、これらのブラウザでページのコンテンツを表示するには、追加のスペースを送信する必要があります。
正しい使用順序は次のとおりです: 最初に ob_flush、次にフラッシュです。
もちろん、他の sapi では、flush を呼び出さなくても問題ありませんが、コードの移植性を確保するために、フラッシュと組み合わせて使用することを推奨します。
|