PHP ၏ output output ကိုကြားခံယန္တရားတွင် Ob_list_handlers () သည်အလွန်လက်တွေ့ကျသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းမှတစ်ဆင့်ကျွန်ုပ်တို့သည်မည်သည့် output processor များကိုတက်ကြွစွာနားလည်နိုင်သည်,
သို့သော် OB_List_Handlers () သည် အချို့သောအသုံးပြုမှုအခြေအနေများတွင် oblist justs သို့မဟုတ်မမျှော်လင့်သောအပြုအမူများကိုလည်းပစ်ချနိုင်သည်။ ဤဆောင်းပါးသည်ဤကဲ့သို့သောဘုံမေးခွန်းများကိုဖုံးအုပ်ပြီး၎င်းတို့ကိုရှောင်ရှားရန်နည်းလမ်းများပေးလိမ့်မည်။
PHP တွင် Output Buffering သည် developer များက developer များက scripts ၏ output ကိုထိန်းချုပ်ရန်ခွင့်ပြုသည်။ Buffer ကို enable လုပ်ပါက PHP သည် 0 န်ဆောင်မှုခံယူမည့်အစား php ကို memory တွင်သိမ်းဆည်းသည်။ Buffer ကိုလည်ပတ်ရန်အောက်ပါလုပ်ဆောင်ချက်များကိုသင်အသုံးပြုနိုင်သည်။
ob_start () - output buffering ကိုဖွင့်ပါ။
ob_get_contents () : အကြောင်းအရာကိုကြားခံတွင်ရယူပါ။
ob_clean () : ကြားခံရှင်းလင်းခြင်းနှင့်ပိတ်ပါ။
ob_list_handlers () - လက်ရှိကြားခံပရိုဆက်ဆာအားလုံးကိုစာရင်းပြုစုထားသည်။
Ob_list_Handlers () သည်မည်သည့်အရာကိုမဆိုတိုက်ရိုက်မထုတ်လုပ်နိုင်သော်လည်း,
OB_CRCLEAN () သို့မဟုတ် ob_clush () ဟုခေါ်သောအခါကျွန်ုပ်တို့သည် Buffer Stack ၏နိုင်ရန်အတွက် buffer ကိုပိတ်ထားရမည်။ အကယ်. သင်သည်ဤလုပ်ဆောင်မှုများကိုမည်သည့်နေရာတွင်မျှကြားမှကြားခံအဆင့်ကိုမသေချာပါစေနှင့်ခေါ်ဆိုပါကကြားခံဖွဲ့စည်းပုံကိုချိုးဖျက်ရန်လွယ်ကူပြီး "output send" အမှားတစ်ခုသို့ ဦး တည်ရန်လွယ်ကူသည်။
ဥပမာအမှားအယွင်း:
ob_start();
echo "အကြောင်းအရာကိုထုတ်ယူခြင်း";
$handlers = ob_list_handlers();
foreach ($handlers as $handler) {
ob_end_clean(); // အဲဒီလိုလုပ်ခြင်းအားဖြင့်မှားယွင်းသောကြားခံကိုပိတ်နိုင်သည်
}
လုပ်ရန်မှန်ကန်သောနည်းလမ်း -
while (ob_get_level() > 0) {
ob_end_clean();
}
တနည်းအားဖြင့်, သတ်သတ်မှတ်မှတ်ပရိုဆက်ဆာတစ်ခုတည်ရှိပြီးစစ်ဆေးပါ။
$handlers = ob_list_handlers();
if (in_array('default output handler', $handlers)) {
ob_end_clean();
}
အကယ်. ကြားခံသည်စနစ်တကျရှင်းလင်းခြင်းသို့မဟုတ်ပိတ်ခြင်းမရှိပါက Output သည် header မက်ဆေ့ခ်ျပို့သောအခါအောက်ပါအမှားများကိုစတင်ကြုံတွေ့ရလိမ့်မည်ဟုထင်လိမ့်မည်။
Warning: Cannot modify header information - headers already sent
ထိုကဲ့သို့သောအမှားအယွင်းများကိုရှောင်ရှားရန်မည်သည့် output ကိုမှမဖြစ်ပေါ်မီကြားခံထိန်းချုပ်မှုလုပ်ငန်းများပြီးစီးကြောင်းသေချာစေပါ။
နမူနာ fix:
ob_start();
// အဘယ်သူမျှမအမှန်တကယ်အကြောင်းအရာဒီမှာ output ကိုဖြစ်ခဲ့သည်,လုံခြုံတဲ့ခေါ်ဆိုမှု header
header('Location: https://gitbox.net/dashboard');
ob_end_flush();
Developer တချို့ developer များသည် debugging အတွက်လက်ရှိကြားခံပြည်နယ်မှတစ်ဆင့်လက်ရှိကြားခံပြည်နယ်မှ () ကို debugging လုပ်ရန်ကြိုးစားကြမည်မှာ,
အသုံးပြုရန်အကြံပြုထားခြင်းမရှိပါ
print_r(ob_list_handlers()); // စေနိုင်သည် HTML ရှုပ်ထွေး output
အကြံပြုထားသောအသုံးပြုမှု:
echo '<pre>';
print_r(ob_list_handlers());
echo '</pre>';
သို့မဟုတ် log in log in:
error_log(print_r(ob_list_handlers(), true));
ob_list_handlers ကို အသုံးပြုသောအခါ output အမှားများကိုရှောင်ရှားနိုင်ရန်အတွက်အောက်ပါအချက်များကိုအကြံပြုပါသည်။
ထုတ်လုပ်မှုပတ် 0 န်းကျင်ရှိ output buffer ဖွဲ့စည်းပုံကိုဖော်ထုတ်ခြင်းနှင့်ရှောင်ရှားခြင်းမပြုပါနှင့်ရှောင်ရှားခြင်းမပြုပါနှင့်။
ကြားခံအဆင့်ကိုအမြဲတမ်းဆုံးဖြတ်ပြီး ob_get_level ကို သေချာအောင်လုပ်ပါ။
Buffer ကိုပိတ်ထားသည့်အခါ header () , setcookie () နှင့်အခြားလုပ်ဆောင်မှုများကိုအသုံးပြုခြင်းကိုရှောင်ကြဉ်ပါ။
ob_list_handlers () ရလဒ်ကိုထုတ်လွှင့်သည့်အခါတိုက်ရိုက်ပဲ့တင်ထပ်မည့်အစားမှတ်တမ်းကိုရေးဆွဲခြင်းသို့မဟုတ်မှတ်တမ်းသို့စာရေးခြင်းကိုဂရုပြုပါ။
ရှင်းရှင်းလင်းလင်းကြားခံအလွှာတစ်ခုစီ၏တာ 0 န် 0 တ္တရားများကိုလက်ဝါးကပ်တိုင် 0 င်ရောက်ခြင်းကိုရှောင်ရှားရန်ရှင်းလင်းစွာခွဲခြားထားသည်။
Ob_List_Handlers () PHP output buffer buffer debugging အတွက်အရေးကြီးသောကိရိယာတစ်ခုဖြစ်သော်လည်းမလျော်ကန်သောအသုံးပြုမှုသည် output အမှားများကိုဖြစ်ပေါ်စေနိုင်သည်။ ၎င်း၏လုပ်ဆောင်မှုကိုနားလည်ခြင်းနှင့်သင့်လျော်သောကြားခံစီမံခန့်ခွဲမှုနည်းလမ်းများကိုပေါင်းစပ်ပြီး application များ၏တည်ငြိမ်မှုနှင့်ထိန်းသိမ်းခြင်းကိုထိရောက်စွာတိုးတက်စေနိုင်သည်။ ဤလုပ်ဆောင်မှုကို အသုံးပြု. အသေးစိတ်အချက်အလက်များကိုကျွမ်းကျင်မှုသည် PHP developer တိုင်းအတွက်အဆင့်မြင့်အဆင့်သို့ပြောင်းရွှေ့ရန်လိုအပ်သောခြေလှမ်းဖြစ်သည်။
ငါ့ကို ob_start မှာနောက်ထပ်အကြံဥာဏ်တွေထပ်ထည့်ချင်တာလား။