ホームページ  >  記事  >  バックエンド開発  >  PHP出力キャッシュの魅力

PHP出力キャッシュの魅力

巴扎黑
巴扎黑オリジナル
2016-11-12 09:59:041232ブラウズ

php出力キャッシュの魅力


1: 出力キャッシュの紹介

phpにおけるいわゆる出力キャッシュとは、コード内のechoやその他の出力コマンドが実行時に最初にphpバッファに書き込まれ、その後、スクリプトが実行または強制される データは、出力キャッシュ コマンドの実行後にのみブラウザに出力されます (php バッファーは php.ini で設定された出力バッファリングです。デフォルトはオンで、無制限のサイズを示します。制限する数値に変更できます)サイズ)。

例:

echo 'hlmblog.com';
echo 'Sharing';


これらの 2 つのエコーは、スクリプトの実行が完了するか、出力が強制的にキャッシュされる この場合のみ、データがブラウザに出力されます。
エコー データをリアルタイムで出力したい場合は、以下のコードを参照してください:


エコー データをリアルタイムで出力したい場合は、以下のコードを参照してください:

ob_end_flush() //php キャッシュを閉じるか、フラッシュ ( ) 以下で説明するように、最初に ob_flush() を実行します。
echo str_pad(" ", 256);
for ($i=5; $i>0; $i--) {
echo $i ';と曖昧ですが、実は両者には大きな違いがあります。
php.iniでphpバッファキャッシュが有効になっていない場合、キャッシュがオンになっていないため、phpスクリプトで出力したコンテンツはサーバー上で出力待ちの状態となり、出力キャッシュに保存されません。今回は、flush を使用して、出力を待機しているコンテンツをクライアント (ブラウザーまたはその他の出力端末) に即時に出力できます。
php.ini で PHP バッファ キャッシュが有効になっている場合、PHP スクリプト出力コンテンツの最初のステップでは出力コンテンツにデータが保存されないため、flush を使用しても効果はありません。データが取得できません。したがって、まず ob_flush を使用して出力キャッシュ内のコンテンツを取り出し、出力待ち状態にしてから、flush を使用してコンテンツをクライアントに送信する必要があります。実行順序は、最初に ob_flush、次にフラッシュです。
したがって、リアルタイム出力を実現するには、ob_end_flush を使用して PHP 出力キャッシュをオフにしてから直接フラッシュするか、最初に ob_flush を使用してからフラッシュします。
2: ブラウザはリアルタイムデータを出力できません
Chrome、Firefox、IEなどのブラウザでは、一斉に出力されてしまう非常に不思議な現象です:

ob_end_flush(); //php キャッシュを閉じる、またはフラッシュ前
echo str_pad(" ", 256);
echo $i; );
sleep(1 );
}

ずっとバグを探してた結果、HTMLタグを追加するだけでリアルタイムに出力できる現象を発見しました。
その理由は、HTML タグが見つかった場合にのみ即座に出力されるためです。幸いなことに、出力コンテンツには通常 HTML タグが含まれ、プレーン テキストが含まれることはほとんどありません。
解決策: 問題を解決するには、キャリッジ リターンまたは他の HTML タグを追加します。
2: キャッシュ出力の用途を制御する、いくつかの具体例
1: 静的ページを生成する
静的ページの読み込み速度は速い、この文は周知の事実であり、データベースをリクエストする必要はありません、これはなんと素晴らしいことでしょう。
以下は静的ページを生成する例です:

echo str_pad('', 1024);//バッファをオーバーフローします
ob_start();//バッファを開きます
$content = ob_get_contents();//ページ出力コンテンツ
$f = fopen('./index.html', 'w');
fwrite($f, $content);//コンテンツは txt ファイルに書き込まれます
fclose($f); ob_end_clean();/ /バッファをクリアして閉じます

伝説の静的ページはこのように単純に生成されます。
2: 出力のキャプチャ

function test($param) {
ob_start();
eval($param)
$contents = ob_get_contents()
}else {
echo '申し訳ありませんが出力します';
exit()

return $contents
;

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。