現在の位置: ホーム> 最新記事一覧> PHPでob_get_contents()およびob_start()マルチレイヤーネストを使用する方法は?実践的なスキル分析

PHPでob_get_contents()およびob_start()マルチレイヤーネストを使用する方法は?実践的なスキル分析

gitbox 2025-09-08
<span><span><span class="hljs-meta">&lt;?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">"これらは記事の内容に関係のないものです PHP 出力の例。\n"</span></span><span>;
</span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現存在するの時刻: <span class="hljs-subst">$time</span></span></span><span>\n";
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ------------------- テキストを開始します -------------------</span></span><span>

<span class="hljs-comment">/**
 * タイトル: PHP 真ん中 ob_get_contents() そして ob_start() 多層ネスティングの使用方法?実践的なスキル分析
 *
 * 存在する PHP 真ん中,出力バッファリング(Output Buffering)非常に便利な機能です,它允许你存在する脚本执行过程真ん中
 * 出力コンテンツをキャプチャします,すぐにブラウザに送信する代わりに。`ob_start()` そして `ob_get_contents()` 是出力バッファリング
 * 真ん最も一般的に使用される機能。さまざまな部品の出力を制御するために多層ネストバッファリングが必要な場合,それらがどのように機能するかを理解することが特に重要です。
 *
 * 1. ob_start() の役割
 * --------------------
 * `ob_start()` 启动一个新的出力バッファリング区。その後すべての出力(のように echo、print)彼らはこのバッファーにキャッシュされます,
 * ブラウザに直接出力する代わりに。
 *
 * 例:
 */</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-variable">$content1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// 現在のバッファコンテンツを取得します</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n得られた最初のバッファーの内容: <span class="hljs-subst">$content1</span></span></span><span>\n";

<span class="hljs-comment">/**
 * 2. 多層ネストされたバッファリング
 * ----------------
 * 多層ネスティングが必要な場合,複数回呼び出すことができます ob_start(),通話が呼び出されるたびに新しいバッファーが作成されます,スタック構造を形成します。
 * 合格 ob_get_contents() 現在のバッファーの内容を取得できます,合格 ob_end_flush() または ob_end_clean() 
 * 現在のバッファーを終了できます。
 *
 * 例:
 */</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">"最初のレベルが始まります\n"</span></span><span>;

</span><span><span class="hljs-title function_ invoke__">ob_start</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">"2番目のレイヤーコンテンツ\n"</span></span><span>;
</span><span><span class="hljs-variable">$secondLayer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// 获取2番目のレイヤーコンテンツ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</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">"1階は続きます\n"</span></span><span>;
</span><span><span class="hljs-variable">$firstLayer</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ob_get_contents</span></span><span>(); </span><span><span class="hljs-comment">// コンテンツの最初のレイヤーを取得します</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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\n2番目のレイヤーでキャプチャされたコンテンツ: <span class="hljs-subst">$secondLayer</span></span></span><span>\n";
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"最初のレイヤーでキャプチャされたコンテンツ: <span class="hljs-subst">$firstLayer</span></span></span><span>\n";

<span class="hljs-comment">/**
 * 3. 実用的なヒント
 * ------------
 * - 出力の遅延:合格多层缓冲,最初にコンテンツを処理できます,変更と出力。
 * - テンプレートレンダリング:存在する渲染模板时,最初に出力をバッファすることができます,进行变量替换または缓存后再输出。
 * - ロギング:出力コンテンツをキャプチャします到文件而不是直接输出。
 *
 * 注意すべきこと:
 * - 毎回 ob_start() すべてが協力する必要があります ob_end_flush() または ob_end_clean()。
 * - ネストされた層が多すぎると、メモリオーバーヘッドが増加する可能性があります,実際のニーズに応じて使用することをお勧めします。
 *
 * 4. 综合例
 */</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">"HTML ページヘッダー\n"</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">"&lt;p&gt;サブジェクトコンテンツ&lt;/p&gt;\n"</span></span><span>;
</span><span><span class="hljs-variable">$bodyContent</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_clean</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">"&lt;header&gt;頭&lt;/header&gt;\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$bodyContent</span></span><span>; </span><span><span class="hljs-comment">// 再次输出サブジェクトコンテンツ</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-comment">// ------------------- テキストの終わり -------------------</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?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">?&gt;</span></span><span>
</span></span>