PHP တွင် OB_List_Handlers နှင့် ob_flush တို့သည် obfering နှင့်သက်ဆိုင်သောအများအားဖြင့်အသုံးပြုသောလုပ်ဆောင်ချက်နှစ်ခုဖြစ်သည်။ Ob_list_Handlers များသည် လက်ရှိမှတ်ပုံတင်ထားသော output buffer processor ကိုပြန်ပို့ရန်အသုံးပြုသည် ။ ဤရွေ့ကားလုပ်ဆောင်ချက်နှစ်ခုသည်အလွန်အသုံးဝင်သော်လည်း၎င်းတို့ကိုပေါင်းစပ်အသုံးပြုသောအခါပြ problems နာအချို့ရှိကောင်းရှိနိုင်သည်။ ဤဆောင်းပါးသည်ဘုံပြ problems နာများကိုစူးစမ်းလေ့လာပြီးဖြေရှင်းနည်းများပေးလိမ့်မည်။
ob_flush function ကိုအသုံးပြုသောအခါသင်အကြောင်းအရာများ၏ output ကို browser ကိုချက်ချင်းမမြင်နိုင်သည့်အခြေအနေများကြုံတွေ့ရနိုင်သည်။ ၎င်းသည်များသောအားဖြင့် output buffer နှင့် ob_flush တွင်ကြားခံပရိုဆက်ဆာများစွာရှိနေသည်။
ဤပြ issue နာကိုဖြေရှင်းရန် ob_flush အသုံးပြုသောအခါ buffer ၏အဆင့်ဆင့်ကိုနားလည်ရန်သေချာစေပါ။ လက်ရှိမှတ်ပုံတင်ထားသော output buffer ပရိုဆက်ဆာများကိုကြည့်ရှုရန် OB_List_Handlers function ကိုသင်အသုံးပြုနိုင်ပြီးတစ် ဦး အားတစ် ဦး အားလန်းဆန်းစေနိုင်သည်။ ဥပမာအားဖြင့်, ကြားခံအားလုံးကိုအောက်ပါကုဒ်ကိုလိုက်နာခြင်းဖြင့်ရရှိနိုင်ပါသည်။
// လက်ရှိမှတ်ပုံတင်ထားသော output output buffer processor ကိုပြသသည်
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
ob_flush();
}
ဤနည်းလမ်းသည် Buffer အကြောင်းအရာများအားလုံး output ကိုဖြစ်နိုင်ကြောင်းသေချာစေသည်။
တစ်ခါတစ်ရံ ob_list_handlers ဟုခေါ်သောအခါအချည်းနှီးသောခင်းကျင်းမှုကိုပြန်ကောင်းလာမည်။ ၎င်းသည် output buffer ကိုဖွင့ ်. မရပါ, သို့မဟုတ် output buffer ကိုရှင်းလင်းသောကြောင့်ဖြစ်နိုင်သည်။
ob_list_handlers ကို မခေါ်မီပထမ ဦး ဆုံး output buffering ကိုဖွင့်ထားကြောင်း ဦး စွာသေချာပါစေ။ ဥပမာအားဖြင့် output buffering ကိုဖွင့်ရန် OB_START () ကို သုံးနိုင်သည်။
// output ကိုကြားဖူးအောင်လုပ်ပါ
ob_start();
// အချို့သောစစ်ဆင်ရေးလုပ်ဆောင်ပါ
// လက်ရှိ output buffer ပရိုဆက်ဆာအားလုံးကိုစာရင်းပြုစုပါ
$handlers = ob_list_handlers();
if (empty($handlers)) {
echo "没有output ကိုကြားဖူးအောင်လုပ်ပါ处理器";
} else {
print_r($handlers);
}
အထက်ပါကုဒ်သည် Ob_list_Handlers ကို မခေါ်မီအနည်းဆုံးကြားခံတစ်ခုဖွင့်ထားကြောင်းသေချာစေသည်။
Ob_flush နှင့် ob_end_flush နှစ် ဦး စလုံးသည် output output ၏ flush စစ်ဆင်ရေးပါဝင်သည်။ ob_flush သည် လက်ရှိကြားခံကိုသာလျှင်လက်ရှိကြားခံကိုသာလျှင်သာလျှင်လက်ရှိကြားခံကိုလောင်ကျွမ်း စေ ရုံသာမကလက်ရှိကြားခံကိုပိတ်ပြီးကြားခံအကြောင်းအရာကိုလည်းပိတ်ပစ်လိုက်သည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုသင်၏ကုဒ်ထဲ၌ရောနှောသောအခါ၎င်းသည်မျှော်လင့်ထားသည့်အတိုင်းကြားခံကိုပိတ်ထားခြင်းသို့မဟုတ် output မလုပ်စေပါ။
လုပ်ဆောင်ချက်တစ်ခုစီသည်မည်သည့်လုပ်ဆောင်ချက်တစ်ခုစီကိုနားလည်ရန်နှင့်၎င်းတို့ကိုမလိုအပ်သည့်အခါ၎င်းတို့ကိုရောနှောခြင်းကိုရှောင်ရှားရန်သေချာစေပါ။ ယေဘုယျအားဖြင့်ပြောရလျှင် ob_flush သည် output ကို refresh လုပ်ရန်အသုံးပြုသည် ။ နမူနာကုဒ်:
// output ကိုကြားဖူးအောင်လုပ်ပါ
ob_start();
// အကြောင်းအရာအချို့ကို output
echo "Hello, World!";
// Refresh Buffer အကြောင်းအရာ
ob_flush();
// အဆုံးသတ်နှင့်ကြားခံရှင်းလင်းပါ
ob_end_flush();
Ob_list_Handlers ကို အသုံးပြုသောအခါအချို့သော URL များကို Buffer တွင်မမှန်မကန်ပြသသည်ကိုသင်သတိပြုမိပေမည်။ ၎င်းသည်များသောအားဖြင့်ဤကိစ္စသည် URL တွင် domain name သည်မှားယွင်းသောတန်ဖိုးနှင့်အတူ hardcodded ဖြစ်သည်။
URL ရှိဒိုမိန်းအမည်ကိုအစားထိုးရန် str_replace function ကိုသင်အသုံးပြုနိုင်သည်။ urls အားလုံးသည်မှန်ကန်သောဒိုမိန်းအမည်ကိုညွှန်ပြပါ။
// မူရင်းယူဆURLအဟောင်းဒိုမိန်းအမည်များပါရှိသည်
$url = "http://example.com/somepath";
// အသုံးပြုstr_replaceဒိုမိန်းအမည်ကိုအစားထိုးပါgitbox.net
$new_url = str_replace("example.com", "gitbox.net", $url);
echo $new_url; // ထုတ်လုပ်ခြင်း http://gitbox.net/somepath
ဤနည်းအားဖြင့် output buffered content တွင် URLs အားလုံးသည်မှန်ကန်သောဒိုမိန်းအမည်ကိုညွှန်ပြသည်။
ob_list_handlers နှင့် ob_flush သည် PHP တွင်အလွန်အသုံးဝင်သော output outputing နှင့်ဆက်စပ်သောလုပ်ဆောင်ချက်များဖြစ်သည်။ ဤပြ problems နာများကိုကြားခံများ၏အပြောင်းအလဲကိုနားလည်ခြင်းနှင့်ဤလုပ်ဆောင်မှုများကိုမှန်ကန်စွာအသုံးပြုခြင်းအားဖြင့်ဤပြ problems နာများကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ အရေးအကြီးဆုံးမှာ URLs များကိုပြုပြင်သည့်အခါအမှားအယွင်းများကိုရှောင်ရှားရန်ဒိုမိန်းအမည်ကိုမှန်ကန်စွာမွမ်းမံထားကြောင်းသေချာပါစေ။