flush ();
ob_start();
echo 'aaa' ;
$string = ob_get_contents();
file_put_contents ( 'a.html' , $string );
ob_flush();
flush ();
出力バッファに関する設定 PHP.INIにはバッファと密接に関係する設定項目が2つあります 1.output_buffering この設定はPHP自体のバッファに直接影響する設定で、Parameter.on/の3つの設定がありますoff/xK (x は整数値); on - バッファをオンにする off - バッファをオフにする 256k - バッファをオンにする、バッファの内容が 256k を超えると、バッファは自動的に更新されます(データを Apache に送信);
2.implicit_flush この設定は Apache バッファに直接影響し、on/off on の 2 つの設定パラメータがあります。つまり、php がデータを送信するときです。 Apache バッファー、他の命令を待つ必要はなく、出力はブラウザーに直接返されます off - Apache バッファーを自動的にリフレッシュしません。データを受信した後、リフレッシュ命令を待ちます buffer1 .ob_implicit_flush この関数は、apache バッファを自動的に更新するかどうかを指定する、implicit_flush と同じです。 2.flush この関数は、Apache に自身の出力バッファを更新させるための命令を送信します。 php.ini に関係なく出力バッファを開きます。 ファイルの設定方法 この関数を使用すると、output_buffering が off に設定されている場合でも、ob_start 関数はコールバックであるパラメータも受け入れます。これは、バッファーの内容を入力する前に、渡されたパラメーターを呼び出してバッファーの内容を一度処理し、それをバッファーに入れる必要があることを意味します 4.ob_flush PHP 自体に独自のバッファーを更新するように指示し、データをApacheに送信します 5.ob_clean PHPバッファの内容をクリアします 6.ob_end_clean PHPバッファの内容をクリアして出力バッファを閉じます 7.ob_end_flush PHP自身のバッファの内容をApacheに送信してクリアします自身のバッファの内容を取得します 8.ob_get_clean バッファの内容を取得した後、バッファをクリアします。 9.ob_get_contents 出力バッファの内容を取得します 10.ob_get_flush バッファの内容を取得し、これらの内容を送信しますapache へ 11.ob_get_length バッファを取得します 12.ob_list_handlers のコンテンツの長さを取得します ob_start の実行時に呼び出される関数の名前を取得します。例: ob_start('ob_gzhandler'); print_r(ob_list_handlers); ob_gzhandler が表示されます。 13.ob_gzhandler この関数は、ob_start のコールバック パラメーターとして使用され、データに対して gzip 圧縮または deflate 圧縮を実行するために呼び出されます。 zlib拡張子
のバッファの関連コンテンツを使用します
1.ob_flushとflushの順序関係 上記の分析から、ob_flushはPHP自体に関連しており、flushはApacheのバッファを操作することがわかります。これら 2 つの関数を使用する場合は、最初に ob_flush を実行し、次に flash を実行する必要があります。これは、php がデータを更新していない場合は、まず PHP から Apache にデータを送信し、次に Apache からブラウザにデータを返す必要があるためです。 apache を呼び出してフラッシュを呼び出すと、Apache はブラウザーにデータを返しません。 2. 一部のブラウザーでは、受信する文字数が少なすぎると、データが表示されません (古いバージョンの IE など) (表示するには 256k より大きくなければなりません)これは、php と Apache の両方で明らかに疑問が生じます。バッファを更新する操作が実行されましたが、ブラウザに必要なデータが表示されませんでした。そのため、テスト時に複数のデータを追加できる可能性があります。出力データの後にスペースを追加すると、ブラウザーがそのような奇妙な問題を引き起こすことはないと確信しています。これは、独自の出力バッファーが 4K に達するまでコンテンツが更新されないことを意味します。そのため、コンテンツ データを確保するために、次のコードを追加してコンテンツの長さを確保できます
12 345
<?php | echo</code > <code class="php function">str_repeat ( " " ,4096);
<?php
echo str_repeat ( " " ,4096);
?><code class="php plain">?>
|
4. Apache で mod_gzip 圧縮モジュールを有効にすると、フラッシュ関数が更新に失敗する可能性があります。これは、PHP がフラッシュ関数を実行するときに、Apache に出力を更新するように指示するためです。 Apache は独自の mod_gzip モジュールにコンテンツを出力しますが、mod_gzip は独自の出力バッファを持っているため、この状況を改善するためにコンテンツをすぐに出力できません。 mod_gzip モジュールをオフにするか、次の内容を httpd.conf に追加して圧縮を無効にすることができます
1
|
SetEnv no-gzip dont-vary
|
関連推奨事項:
詳細PHPバッファのフラッシュの説明 サイトを高速化します
PHPバッファとは何ですか?
|