<span><span><span class="hljs-meta"><?php</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">"このチュートリアルをお読みください!\n"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>PHP開発では、コンテンツを圧縮、キャッシュ、HTMLコンテンツの変更など、コンテンツをブラウザに送信する前に出力を処理する必要がある場合があります。OB_START()は、PHPが提供する非常に強力な出力バッファリング機能であり、開発者が出力ストリームを柔軟に制御するのに役立ちます。この記事では、PHPでOB_STARTを使用して出力バッファリングを実装する方法について詳しく説明します。
デフォルトでは、 ECHOや印刷などの出力ステートメントを実行すると、PHPはすぐにブラウザにコンテンツを送信します。出力バッファリングにより、PHPはバッファがクリアまたは送信されるまで、最初にバッファーに出力を保存できます。これにより、開発者は以下を可能にします
ブラウザに送信する前に出力を変更します。
出力順序を制御します。
コンテンツ圧縮またはキャッシュメカニズムを実装します。
「すでに送信されているヘッダー」エラーを避けてください。
PHPでは、 ob_start()を使用して出力バッファリングを有効にすることは非常に簡単です。
<span><span><span class="hljs-meta"><?php</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">"このセクションは、最初にバッファに保存されます,すぐに出力する代わりに。"</span></span><span>;
</span><span><span class="hljs-comment">// バッファコンテンツを取得します</span></span><span>
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"バッファの内容はです: "</span></span><span> . </span><span><span class="hljs-variable">$content</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-meta">?></span></span><span>
</span></span>ob_start() :出力バッファリングを開始します。
ob_get_contents() :現在のバッファーの内容を取得します。
OB_END_CLEAN() :コンテンツを出力せずにバッファをクリアしてバッファを閉じます。
クリアの代わりにバッファーコンテンツを出力する場合は、 ob_end_flush()を使用できます。
ob_start()は、ブラウザに送信される前に出力を処理できるコールバック関数を受け入れることができます。たとえば、HTMLを圧縮します:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// コールバック関数圧縮 HTML</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compress_output</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$buffer</span></span></span><span>) {
</span><span><span class="hljs-variable">$search</span></span><span> = [</span><span><span class="hljs-string">'/>\s+/'</span></span><span>,</span><span><span class="hljs-string">'/\s+</'</span></span><span>,</span><span><span class="hljs-string">'/\s{2,}/'</span></span><span>];
</span><span><span class="hljs-variable">$replace</span></span><span> = [</span><span><span class="hljs-string">'>'</span></span><span>,</span><span><span class="hljs-string">'<'</span></span><span>,</span><span><span class="hljs-string">' '</span></span><span>];
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">preg_replace</span></span><span>(</span><span><span class="hljs-variable">$search</span></span><span>, </span><span><span class="hljs-variable">$replace</span></span><span>, </span><span><span class="hljs-variable">$buffer</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>(</span><span><span class="hljs-string">"compress_output"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<html> <body> <h1> いらっしゃいませ PHP 出力バッファリング </h1> </body> </html>"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 処理されたコンテンツを出力します</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>この例では、コールバック関数Compress_Outputは、HTMLで不必要なブランクとラインブレークを削除し、それにより送信されたデータの量を減らします。
PHPはマルチレベルバッファリングをサポートしています。つまり、別のバッファーを1つのバッファーでオンにすることができます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"バッファリングの最初の層"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ob_start</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"バッファリングの第2層"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"バッファリングの第2層内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 输出バッファリングの第2層内容</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"バッファリングの最初の層内容: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">ob_end_flush</span></span><span>(); </span><span><span class="hljs-comment">// 输出バッファリングの最初の層内容</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>マルチレベルバッファリングを使用して、異なるモジュールのさまざまなキャッシュ戦略など、さまざまな出力をレイヤーで処理できます。
出力が送信された後、ヘッダー情報を送信しないでください。出力バッファリングを使用すると、「すでに送信されているヘッダー」エラーを回避できます。
キャッシュコントロール:ページをキャッシュまたは圧縮する必要がある場合は、バッファーが早すぎないことを確認してください。
パフォーマンスの考慮事項:大きなファイルバッファーはメモリを占有する可能性があり、注意して使用する必要があります。
OB_Start()を介して、PHP開発者は出力の送信時間とコンテンツの処理方法を完全に制御できます。ページ圧縮、キャッシュポリシー、ヘッダー情報エラーの防止など、出力バッファリングは非常に実用的なツールです。 ob_start()および関連する関数( ob_get_contents() 、 ob_end_flush() 、 ob_end_clean( )などのマスターをマスターした後、PHP出力管理機能は大幅に改善されます。