လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင် ob_get_contros () နှင့် ob_start () ကိုအသုံးပြုနည်း။ လက်တွေ့ကျွမ်းကျင်မှုခွဲခြမ်းစိတ်ဖြာခြင်း

PHP တွင် ob_get_contros () နှင့် ob_start () ကိုအသုံးပြုနည်း။ လက်တွေ့ကျွမ်းကျင်မှုခွဲခြမ်းစိတ်ဖြာခြင်း

gitbox 2025-09-08
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// ------------------- Pre-ရှိပြီးသားဆီလျှော်အကြောင်းအရာ -------------------</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() Multi-layer nesting ကိုဘယ်လိုသုံးရမလဲ?လက်တွေ့ကျွမ်းကျင်မှုခွဲခြမ်းစိတ်ဖြာခြင်း
 *
 * တည်နေ PHP အလယ်ပိုင်း,output ကိုကြားခံ(Output Buffering)ဒါဟာအလွန်အသုံးဝင်သောအင်္ဂါရပ်ဖြစ်ပါတယ်,它允许你တည်နေ脚本执行过程အလယ်ပိုင်း
 * output အကြောင်းအရာကိုဖမ်းယူ,ချက်ချင်း browser ကိုချက်ချင်းပို့ပေးမယ့်အစား。`ob_start()` နှင့် `ob_get_contents()` 是output ကိုကြားခံ
 * အလယ်ပိုင်း最常用的函数。ကွဲပြားခြားနားသောအစိတ်အပိုင်းများ၏ output ကိုထိန်းချုပ်ရန်သင် multi-layer အသိုက်ကြားခံလိုအပ်တဲ့အခါ,သူတို့ဘယ်လိုအလုပ်လုပ်ပုံကိုနားလည်ဖို့အထူးအရေးကြီးတယ်。
 *
 * 1. ob_start() ၏အခန်းကဏ်။
 * --------------------
 * `ob_start()` 启动一个新的output ကိုကြားခံ区。ပြီးနောက်အားလုံး outputs(ကဲ့သို့ echo、print)သူတို့ကဒီကြားခံမှဖမ်းယူပါလိမ့်မည်,
 * အစား browser ကိုမှတိုက်ရိုက် outputtuting ၏。
 *
 * နမူနာ:
 */</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">// output ကိုနှင့်ကြားခံအဆုံးသတ်</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\nရရှိသောပထမ ဦး ဆုံးကြားခံ၏ contents: <span class="hljs-subst">$content1</span></span></span><span>\n";

<span class="hljs-comment">/**
 * 2. Multi-layer nested buffering
 * ----------------
 * Multi-layer အသိုက်လိုအပ်သည့်အခါ,မျိုးစုံအကြိမ်ပေါင်းများစွာခေါ်နိုင်ပါတယ် ob_start(),ခေါ်ဆိုမှုကိုခေါ်သည့်အခါတိုင်းကြားခံအသစ်တစ်ခုကိုဖန်တီးသည်,တစ် stack ဖွဲ့စည်းပုံဖွဲ့စည်း。
 * သွား ob_get_contents() သင်လက်ရှိကြားခံ၏ 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">// buffering ၏ပထမ ဦး ဆုံးအလွှာ</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">// ကြားခံ၏ဒုတိယအလွှာ</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-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">// 获取ဒုတိယအလွှာအကြောင်းအရာ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ob_end_clean</span></span><span>(); </span><span><span class="hljs-comment">// 清空ကြားခံ၏ဒုတိယအလွှာ(အဘယ်သူမျှမ output ကို)</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-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">// 输出buffering ၏ပထမ ဦး ဆုံးအလွှာ区内容</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"\nComment ကိုဒုတိယအနေဖြင့်ဖမ်းမိ: <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. လက်တွေ့ကျသောအကြံပြုချက်များ
 * ------------
 * - output ကိုနှောင့်နှေး:သွား多层缓冲,သင်ပထမ ဦး ဆုံးအကြောင်းအရာ process နိုင်ပါတယ်,ပြုပြင်မွမ်းမံခြင်းနှင့် output ကို。
 * - template rendering:တည်နေ渲染模板时,သင်ပထမ ဦး ဆုံး output ကို buffer နိုင်ပါတယ်,进行变量替换သို့မဟုတ်缓存后再输出。
 * - သစ်ခုတ်:output အကြောင်းအရာကိုဖမ်းယူ到文件而不是直接输出。
 *
 * မှတ်သားရန်အရာ:
 * - အချိန်တိုင်း ob_start() အားလုံးပူးပေါင်းဆောင်ရွက်ရမယ် ob_end_flush() သို့မဟုတ် ob_end_clean()。
 * - အသိုက်အလွှာများလွန်းသည်မှတ်ဉာဏ် overhead ကိုတိုးပွားစေနိုင်သည်,အမှန်တကယ်လိုအပ်ချက်များအရအသုံးပြုရန်အကြံပြုသည်。
 *
 * 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">// ရှင်းလင်းပေမယ့် output ကိုမဟုတ်ပါဘူး</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">// အားလုံး output</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>