PHPでは、出力バッファーは、ブラウザに送信されたコンテンツを一時的に保存する重要な概念です。 PHPは、 OB_END_CLEAN()とOB_FLUSH()である出力バッファーの動作を制御するための多くの機能を提供します。似ているように見えますが、機能と使用法のシナリオは明らかに異なります。
OB_END_CLEAN()関数は、現在の出力バッファーを閉じてバッファーの内容を破棄するために使用されます。つまり、この関数を呼び出した後、バッファのコンテンツが破棄され、ページはコンテンツを出力しません。これは通常、バッファーをブラウザに表示することなくキャンセルする必要がある場合に使用されます。
シナリオを使用してください:
出力コンテンツを変更または処理する必要があるが、現在のバッファーのコンテンツをブラウザに送信する必要がない場合は、 ob_end_clean()を使用できます。
バッファーがオンになった後にコンテンツを出力する必要がないことがわかった場合、または特定の条件に応じて出力するかどうかを決定する必要がある場合は、この関数を呼び出してバッファーをクリアできます。
サンプルコード:
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 出力バッファを起動します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This content will be discarded."</span></span><span>; </span><span><span class="hljs-comment">// キャッシュコンテンツ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// バッファコンテンツを廃棄します,出力なし</span></span><span>
</span><span><span class="hljs-comment">// 上記のテキストはページに表示されません</span></span><span>
</span></span>
OB_Flush()関数は、現在のバッファーの内容をすぐにブラウザに送信するために使用されますが、バッファを閉じません。バッファ内のデータをクライアントに単純に出力するだけで、バッファーは依然として存在し、バッファーにデータを書き続けることができます。
シナリオを使用してください:
処理中にバッファー内のデータをブラウザに即座に出力するが、それにデータを追加し続けることができるようにバッファーを保持したい場合は、 ob_flush()を使用できます。
ob_flush()は、レポートを動的に生成するなど、リアルタイムの出力シナリオを処理するためによく使用されます。
サンプルコード:
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 出力バッファを起動します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This content will be flushed to the browser."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>(); </span><span><span class="hljs-comment">// バッファを更新します,ブラウザにコンテンツを送信します</span></span><span>
</span><span><span class="hljs-comment">// ページはすぐに上記のテキストを表示します,後続のコンテンツは引き続きバッファリングされます</span></span><span>
</span></span>
ob_end_clean()とob_flush()はどちらも出力バッファーに関連する関数ですが、動作は異なります。
バッファ処理:
OB_END_CLEAN()は、バッファー内のすべてを破棄し、バッファを閉じます。
ob_flush()は、バッファー内の内容をブラウザに出力しますが、バッファを閉じません。バッファーはまだ存在し、コンテンツを書き続けることができます。
出力結果:
ob_end_clean()は、バッファ内のデータをクリアするため、何も出力しません。
ob_flush()は、現在のバッファーのコンテンツをブラウザに直ちに出力します。
実際の開発では、 OB_END_CLEAN()およびOB_FLUSH()は、特定のニーズを満たすために組み合わせて使用されることがあります。たとえば、大量のデータまたは動的コンテンツを処理する必要があり、一部のコンテンツをタイムリーにユーザーのブラウザに出力する必要があるが、一部のコンテンツを出力したくない場合は、組み合わせを使用できます。
フェーズ出力:レポートを生成したり、大ファイルを処理したりする場合、 ob_flush()を使用して一部のコンテンツを更新でき、 ob_end_clean()は不要なコンテンツを破棄できます。
役に立たないコンテンツのクリーンアップ:出力プロセス中に、一部のコンテンツが期待を満たしておらず、破棄する必要があることがわかった場合、最初にob_flush()を使用して準備されたコンテンツを出力し、次にob_end_clean()を使用して残りの部分を破棄できます。
サンプルコード:
<span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(); </span><span><span class="hljs-comment">// 出力バッファを起動します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This content will be flushed."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_flush</span></span><span>(); </span><span><span class="hljs-comment">// バッファを更新します内容到浏览器</span></span><span>
</span><span><span class="hljs-comment">// 後続のコンテンツの中には、出力を必要としない場合があります</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// その後の不要なバッファーコンテンツを破棄します</span></span><span>
</span><span><span class="hljs-comment">// ページが表示されます“ This content will be flushed.”</span></span><span>
</span></span>
OB_END_CLEAN()は、出力バッファーの内容物を破棄し、バッファを閉じるために使用されます。
ob_flush()は、出力バッファーのコンテンツをブラウザにフラッシュするために使用されますが、バッファーを閉じません。
開発中は、選択する方法は、達成したいことによって異なります。バッファ内のコンテンツを破棄する必要がある場合は、 OB_END_CLEAN()を使用できます。バッファーを保持し、コンテンツをブラウザに出力する場合は、 ob_flush()を使用できます。いくつかのシナリオでは、より柔軟な出力制御のためにそれらを組み合わせて使用する場合があります。