လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Ob_end_fandlush နှင့်အလုပ်လုပ်သော ob_list_handlers နှင့်ပတ်သက်သောမကြာခဏမေးထားသောမေးခွန်းများ

Ob_end_fandlush နှင့်အလုပ်လုပ်သော ob_list_handlers နှင့်ပတ်သက်သောမကြာခဏမေးထားသောမေးခွန်းများ

gitbox 2025-05-20

PHP Development တွင်ထုတ်လုပ်မှုတွင် output buffering သည် developer များအား output content ကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်ထိန်းချုပ်ရန်အလွန်အရေးကြီးသောနည်းပညာတစ်ခုဖြစ်သည်။ သို့သော် output buffering ကိုကျွန်ုပ်တို့စီမံခန့်ခွဲသောအခါ ob_list_handlers () နှင့် ob_end_flush () ကိုအသုံးပြုသည်။ အကယ်. ဤလုပ်ဆောင်ချက်နှစ်ခုကိုမလျော်ကန်စွာအသုံးပြုပါကအချို့သောဘုံပြ problems နာများသည်ပေါ်ပေါက်လာနိုင်သည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခု၏လုပ်ဆောင်မှုများ, ဘုံပြ problems နာများနှင့်ဖြေရှင်းနည်းများကိုစနစ်တကျမိတ်ဆက်ပေးလိမ့်မည်။

1 ။ နိဒါန်း

1 ။ ob_list_handlers ()

ob_list_handlers () ကိုလက်ရှိ activated output buffer ပရိုဆက်ဆာများအားလုံးကိုစာရင်းပြုစုရန်အသုံးပြုသည်။ ဖန်တီးမှုအနေဖြင့်ခွဲထားသောပရိုဆက်ဆာအမည်များပါ 0 င်သည့် array တစ်ခုသို့ပြန်လည်ရောက်ရှိစေသည်။ ဥပမာအားဖြင့်:

 $handlers = ob_list_handlers();
print_r($handlers);

output ကိုဆင်တူသည် -

 Array
(
    [0] => default output handler
    [1] => URL-Rewriter
)

သက်ဆိုင်ရာကြားခံမရှိပါကအချည်းနှီးသောခင်းကျင်းမှုကိုပြန်ပို့သည်။

2 ။ ob_end_flush ()

OB_END_FLUSH () ကို လက်ရှိ output buffer အကြောင်းအရာကို flush လုပ်ရန်အသုံးပြုသည်။ တက်ကြွသောကြားခံမျှမရှိပါကလုပ်ဆောင်ချက်သည်သတိပေးချက်တစ်ခုပေးလိမ့်မည်။

ဥပမာ -

 ob_start();
echo "Hello, GitBox!";
ob_end_flush();

Execute ပြီးနောက် "Hello Gitpbox!" ချက်ချင်း browser ကိုပို့လိမ့်မည်။

2 ။ မကြာခဏမေးသောမေးခွန်းများ

အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင် ob_list_handlers () နှင့် ob_end_flush () ကို ပေါင်းစပ်သောအခါအောက်ပါပြ problems နာများကိုသင်ကြုံတွေ့ရနိုင်သည်။

1 ။ မတည်ရှိသည့်ကြားခံတစ်ခုကိုအဆုံးသတ်ရန်ကြိုးစားပါ

ob_end_flush () အဘယ်သူမျှမကြားခံမရှိပါကသတိပေးချက်တစ်ခုဖြစ်ပေါ်လိမ့်မည်။

 Warning: ob_end_flush(): failed to delete buffer. No buffer to delete

ဘုံအခြေအနေများ:

 if (!empty(ob_list_handlers())) {
    ob_end_flush();
} else {
    // ကြားခံမရှိပါ,မလိုအပ်သောflush
}

ob_end_flush () ကို ကြားခံရှိ, ရှိမရှိစစ်ဆေးခြင်းမပြုဘဲတိုက်ရိုက်ခေါ်ပါကအမှားများပြုလုပ်ရန်လွယ်ကူသည်။

ဖြေရှင်းချက် -

ob_end_flush () ကို မခေါ်မီကြားခံရှိမရှိမရှိစစ်ဆေးပါ။

 if (ob_get_level() > 0) {
    ob_end_flush();
}

ob_get_level () သည် လက်ရှိကြားခံရှိအလွှာအရေအတွက်ကိုပြန်ပို့လိမ့်မည်။ အကယ်. 0 ထက်ကြီးလျှင်၎င်းသည်ကြားခံတစ်ခုရှိသည်ဟုဆိုလိုသည်။

2 ။ Multi-layer output buffering ကိုမှန်ကန်စွာမပိတ်ထားပါ

ရှုပ်ထွေးသော application များ၌မူဘောင်များသို့မဟုတ်တတိယပါတီစာကြည့်တိုက်များအသုံးပြုသောအခါကဲ့သို့သောရှုပ်ထွေးသောအပလီကေးရှင်းများတွင်ကြားခံအလွှာများစွာရှိသည်။ အကယ်. သင်သည် OB_END_FLUSH () ဟုခေါ်ဆိုပါကလက်ရှိအလွှာကိုသာလုပ်ဆောင်နိုင်သည်။ ကျန်ရှိသောကြားခံသည်ထိုတွင်ရှိနေသေးသည်။

ဥပမာ -

 while (ob_get_level() > 0) {
    ob_end_flush();
}

၎င်းသည် output buffer အားလုံးကိုအလွှာမှပိတ်ထားသောအလွှာများကိုအလွှာဖြင့်ပိတ်ထားရန်ခွင့်ပြုသည်။

3 ။ output ကိုထိန်းချုပ်မှု sequence ကိုရှုပ်ထွေးသည်

အချို့သော output buffer များသည်အထူးပရိုဆက်ဆာများ (ဥပမာ Gzip compression or url rewriting ကဲ့သို့သောအထူးပရိုဆက်ဆာများနှင့်ချည်နှောင်ထားနိုင်သည်။ ဤကြားခံဖြင့်ဤကြားခံကိုအဆုံးသတ်ရန်အတင်းအဓမ္မအဂတိလိုက်စားမှုသည်ညစ်ညမ်းသော 0 က်ဘ်စာမျက်နှာများ, အကြောင်းအရာ - encoding အမှားများစသည်တို့ကိုပျက်စီးစေနိုင်သည်။

၎င်းကိုကြွေးရှင်းကိုမည်သို့ကိုင်တွယ်ရမည်နည်း။

ob_list_handlers မှတဆင့် buffer type ကိုစစ်ဆေးပါ () ဘေးကင်းစွာကိုင်တွယ်နိုင်သည့်ကြားခံများကိုသာပိတ်ပါ။ ဥပမာ Gzip_Handler ကဲ့သို့သော buffers များကိုပိတ်ပါ။

 $handlers = ob_list_handlers();
foreach ($handlers as $handler) {
    if ($handler === 'default output handler') {
        ob_end_flush();
    }
}

၎င်းသည်အခြား output ယုတ္တိဗေဒကိုမတော်တဆချိုးဖောက်ခြင်း၏အန္တရာယ်ကိုလျော့နည်းစေသည်။

3 ။ လက်တွေ့ကျသောဥပမာများ

Ob_list_handlers () နှင့် ob_end_flush () ကိုပေါင်းစပ်ထားသောလုံခြုံသောစစ်ဆင်ရေးကြားခံတစ်ခု၏ပြည့်စုံသောဥပမာတစ်ခုမှာ -

 // output buffer စတင်ပါ
ob_start();

// output ကိုအကြောင်းအရာ
echo "ကျွန်တော်တို့ရဲ့ site ကိုသွားပါ:https://gitbox.net/welcome";

// ကြားခံကိုစစ်ဆေးပြီးလုံခြုံစွာပိတ်ပါ
$handlers = ob_list_handlers();
if (!empty($handlers)) {
    foreach ($handlers as $handler) {
        if ($handler === 'default output handler') {
            ob_end_flush();
        }
    }
}

ဤဥပမာတွင် default output processor အတွက်ကြားခံတစ်ခုအတွက်ကြားခံတစ်ခုရှိပါကအခြားစနစ်များကသတ်မှတ်ထားသည့်ကြားခံသည်မပျက်စီးစေနိုင်သော်လည်း၎င်းကိုဖွင့်ပါ။

4 ။ အကျဉ်းချုပ်

PHP တွင် OB_List_Handlers () သည် ob_end_flush () obfend_flush () ကို အသုံးပြု. အသုံးပြု. လက်ရှိ ob_list_handlers () သည်လက်ရှိ obsist_handlers အခြေအနေကိုနားလည်နိုင်သည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုမှန်ကန်စွာကိုက်ညီရန်အလွန်အရေးကြီးသည်, သို့မဟုတ်ပါကသတိပေးချက်များ, စာမျက်နှာခြွင်းချက်များနှင့်ယုတ္တိအမှားများကိုဖြစ်စေရန်လွယ်ကူသည်။

သတိရဖို့သေချာပါစေ:

  • Buffer သည် OB_END_FLUSH () မတိုင်မီတည်ရှိကြောင်းအတည်ပြုပါ။

  • Multi-Layer Buffering ကိုကိုင်တွယ်သောအခါသတိထားပါ။

  • သူတို့ကိုယ်သူတို့မထိန်းချုပ်သော output buffer များကိုမဖျက်ဆီးပါနှင့်။

ဤလုပ်ဆောင်မှုနှစ်ခု၏အသုံးပြုမှုကိုကျွမ်းကျင်မှုသည်သင်၏ PHP စီမံကိန်းကိုပိုမိုခိုင်မာသည့်နှင့် output ကိုစီမံခန့်ခွဲမှုတွင်ပိုမိုခိုင်မာသည့်နှင့်ယုံကြည်စိတ်ချရနိုင်သည်။