PHPでは、出力バッファーは、スクリプト出力の内容を保存するために使用される一時的なストレージエリアです。通常、PHPはディスプレイのためにページコンテンツをブラウザに直接送信します。ただし、出力バッファリングが有効になると、PHPはバッファがクリアされるか、スクリプトが実行されるまで、バッファーにすべての出力(HTML、テキスト、エラーメッセージなど)を保存します。出力バッファリングを有効にすることにより、開発者は出力コンテンツのタイミング、順序、さらにはコンテンツの変更を制御できます。
OB_CLEAN関数は、PHPの出力バッファーをクリアするために使用されます。 OB_CLEANに電話すると、PHPはバッファに保存されているすべてをクリアしますが、バッファーを閉じません。通常、バッファをクリアする目的は、通常、後続の出力を予想どおりブラウザに送信できるようにすることです。
OB_CLEANは出力バッファーをクリアできますが、バッファ状態が適切に管理されていない場合、クリーニング後に次の問題が発生する場合があります。
出力はブラウザに送信されません。バッファがフラッシュされていない場合( OB_Flush )、またはブラウザに正しく出力されない場合、ページが空白になるか、何も表示されない場合があります。
後続の出力がブロックされます。バッファをクリアした後、バッファーが再度有効になっていない場合、またはバッファーステータスが正しく処理された場合、その後の出力が「破棄」されるか、予想どおり送信されなかった場合があります。
ブラウザは不完全な応答を受信します。バッファが正しく管理されていない場合、ブラウザは完全なHTTP応答を受信しない可能性があり、ページの読み込み障害が発生します。
バッファーがクリーニングされた後、後続の出力を正常に表示できるようにするには、次の測定値をとる必要があります。
OB_CLEANを呼び出してバッファをクリアした後、通常、 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">"Hello, this is some content."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>(); </span><span><span class="hljs-comment">// バッファをクリアします</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"This is the new output after cleaning the buffer."</span></span><span>;
</span></span>
バッファを動作させ、後続のコンテンツの出力がスムーズに進むことを確認する場合は、 ob_end_cleanまたはob_end_flushを呼び出すことを避けます。これらの2つの機能はバッファを閉じます。
<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 is the first output."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>(); </span><span><span class="hljs-comment">// バッファをクリアします</span></span><span>
</span><span><span class="hljs-comment">// あなたが電話するならob_end_clean()またはob_end_flush(),バッファは閉じられます,後続のコンテンツを出力することはできません。</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 is the second output after cleaning."</span></span><span>;
</span></span>
以前の出力がブラウザに送信された場合(たとえば、 ob_end_flush() )、バッファの操作が無効になります。したがって、バッファをクリアする前に何も出力されていないことを確認してください。
<span><span><span class="hljs-comment">// バッファが有効になっていない場合,コンテンツ出力は直接ブラウザに送信されます。</span></span><span>
</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">"Initial content."</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_clean</span></span><span>(); </span><span><span class="hljs-comment">// バッファをクリアします</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Content after cleaning the buffer."</span></span><span>; </span><span><span class="hljs-comment">// 通常の出力</span></span><span>
</span></span>
PHPのoutput_buffering構成項目は、PHPが出力バッファリングを有効にするかどうかを決定します。 PHP.INIファイルで出力バッファリングが無効になっている場合、 OB_CLEANは適切に機能しません。この場合、PHPのoutput_buffering構成アイテムが「オン」または適切なバッファサイズであることを確認してください。
<span><span><span class="hljs-attr">output_buffering</span></span><span> = </span><span><span class="hljs-literal">On</span></span><span>
</span></span>
OB_CLEANを使用して出力バッファーをクリーニングした後、出力コンテンツを正常に表示できることを確認してください。重要なのは、バッファのステータスを管理することです。 ob_flushを呼び出すことで、バッファをクリアした後にコンテンツがブラウザに正しく送信されることを保証し、不必要なバッファーシャットダウン操作を避けます。さらに、後続の出力の通常の表示に影響を与えないように、バッファをクリアする前にコンテンツが出力されていないことを確認してください。これらの手順に従って、PHPスクリプトの出力コンテンツを、出力バッファーを使用するときに予想どおりに正常に表示できることを確認してください。