この記事では、PHP 出力キャッシュの使用法を紹介します。PHP におけるいわゆる出力キャッシュとは、スクリプトの実行後、または出力キャッシュ コマンドの実行後に、コード内のエコーまたはその他の出力コマンドが最初に PHP バッファーに書き込まれることを意味します。強制的に実行するとブラウザにデータが出力されます。
1.PHP出力キャッシュとは何ですか? PHP のいわゆる出力キャッシュとは、コード内のエコーまたはその他の出力コマンドが、実行時に最初に PHP バッファーに書き込まれることを意味します。データは、スクリプトが実行されるか、出力キャッシュ コマンドが実行された後にのみブラウザーに出力されます。強制的に実行されます (このうち、php バッファーは php.ini に設定されている out_buffering です。デフォルトは on で、サイズが無制限であることを示します。サイズを制限する数値に変更できます)。 例: 「hlmblog.com」をエコーします。 「テクノロジー」をエコーします。 エコー「共有」;これら 2 つのエコーは順番にバッファーに挿入され、データはスクリプトの実行が完了するか、キャッシュ出力が強制された後にのみブラウザーに出力されます。 リアルタイムでエコー データを出力します。 ob_end_flush(); //以下で説明するように、PHP キャッシュをオフにするか、flush() の前に ob_flush() を実行します。 echo str_pad(" ", 256); for ($i=5; $i>0; $i--) { $i をエコーします。 流す(); スリープ(1); }注: 1: flash と ob_flush の違い: 一見すると、この 2 つはよく似ていますが、多くのマニュアルの説明は不明確で曖昧です。実際、この 2 つは大きな違いがあります。 php.ini で php バッファ キャッシュが有効になっていない場合、php スクリプトによって出力されたコンテンツはサーバー上で出力を待機し、現時点ではキャッシュがオンになっていないため、出力キャッシュに保存されません。出力を待機しているコンテンツを即座にフラッシュするために使用され、出力はクライアント (ブラウザーまたは他の出力端末) に送信されます。 php.ini が php バッファ キャッシュをオンにすると、php スクリプトの出力コンテンツが出力キャッシュに保存されます。この時点では、flush を使用しても効果はありません。データが取得できません。したがって、まず ob_flush を使用して出力キャッシュからコンテンツを取り出し、出力待ちの状態にしてから、flush を使用してコンテンツをクライアントに送信する必要があります。実行順序は、最初に ob_flush、次にフラッシュです。 したがって、リアルタイム出力を実現するには、ob_end_flush を使用して最初に php 出力キャッシュをオフにしてから直接フラッシュするか、最初に ob_flush を使用してからフラッシュします。 2: ブラウザはリアルタイム データを出力できません 変更されたコードは、Chrome、Firefox、IE、およびその他のブラウザーで一度出力されます。 ob_end_flush(); // フラッシュする前に php キャッシュをオフにするか、ob_flush(); echo str_pad(" ", 256); for ($i=5; $i>0; $i--) { $i をエコーします。 流す(); スリープ(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. 出力をキャプチャする関数テスト($param) { if($param) { ob_start(); eval($param); $contents = ob_get_contents(); ob_end_clean(); }それ以外 { echo '残念ながら出力はありません'; 出口(); } $content を返します。 } |