လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ob_list_handlers ကိုအသုံးပြုသောအခါမှန်ကန်သော cache ကိုနိုင်ရန်အတွက်ဘယ်လိုသေချာအောင်လုပ်မလဲ

ob_list_handlers ကိုအသုံးပြုသောအခါမှန်ကန်သော cache ကိုနိုင်ရန်အတွက်ဘယ်လိုသေချာအောင်လုပ်မလဲ

gitbox 2025-05-29

PHP တွင် output buffering (OUB) ယန္တရားသည် developer များအား scripts များ၏ output ကိုထိန်းချုပ်ရန်ခွင့်ပြုသည်။ ob_list_handlers () သည်လက်ရှိ activated output buffer ပရိုဆက်ဆာများကိုစာရင်းပြုစုထားသည့်အရေးကြီးသော debugging function ဖြစ်သည်။ ဆင်ခြင်တုံတရား၏ခေါ်ဆိုမှုအမိန့်ကိုစီမံခြင်း output cache ကိုအထူးသဖြင့်ရှုပ်ထွေးသော Template သို့မဟုတ် Contents compression တွင်ပါ 0 င်သည့်စီမံကိန်းများအတွက်အထူးအရေးကြီးသည်။

Ob_List_Handlers () ကို အသုံးပြုသောအခါ output cache ခေါ်ဆိုမှုအမိန့်ကိုမည်သို့ကောင်းမွန်စွာစီမံခန့်ခွဲရမည်ကိုအသေးစိတ်ဖော်ပြရန်ဤဆောင်းပါးသည်အသေးစိတ်ဖော်ပြချက်ကိုအသေးစိတ်ဖော်ပြထားသည်။

ob_list_handlers () ?

ob_list_handlers () function ကို) function သည်လက်ရှိတက်ကြွသော output output buffer ပရိုဆက်ဆာများ (Handlers) အားလုံးစာရင်းပြုစုထားသည်။ ဥပမာအားဖြင့်:

 <?php
ob_start('ob_gzhandler');
ob_start();
print_r(ob_list_handlers());
?>

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

 Array
(
    [0] => default output handler
    [1] => ob_gzhandler
)

မှတ်ချက် - output order သည် stack stack stack stack stack stack stack stack stack ဖြစ်သည်။ ဖွင့်လှစ်ခဲ့သည့်နောက်ဆုံးကြားခံသည်အပြောင်းအလဲနဲ့လုပ်ဆောင်ရန်ပထမဆုံးဖြစ်သည်။

ငါအဘယ်ကြောင့် output ကို cache ခေါ်ဆိုမှုများ၏အမိန့်ကိုမှန်ကန်စွာစီမံသင့်သလဲ

output cache ကိုမလျော်ကန်စွာအသုံးပြုပါက၎င်းသည်ရလဒ်ဖြစ်နိုင်သည်။

  • နောက်ဆုံး output ကိုထိခိုက်သောမမှန်ကန်သော compression အမိန့်

  • OB_END_FLUSH () OB_CLEAN () ကိုခေါ်သည့်အခါပိတ်ထားသောကြားခံကိုပိတ်ထားသည်။

  • စာမျက်နှာ output သည်အထူးသဖြင့် JSON API, HTML နှင့်အခြားအခြေအနေများကိုကိုင်တွယ်ရာတွင်ဖြစ်သည်

  • ထိုကဲ့သို့သောအထိခိုက်မခံတဲ့ဒေတာများ၏ buffer ယိုစိမ့်အဖြစ်လုံခြုံရေးထိခိုက်မှု

ထို့ကြောင့်ကြားခံတစ်ခုစီ၏အခြေအနေနှင့်အမိန့်ကိုနားလည်ရန်အလွန်အရေးကြီးသည်။

output ကို cache ကိုဘယ်လိုမှန်ကန်စွာစီမံခန့်ခွဲရမလဲ။

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

1 ။ ကြားခံတစ်ခုချင်းစီကိုအလွှာတစ်ခု၏ရည်ရွယ်ချက်ကိုရှင်းလင်းပါ

Output Buffer အသစ်ကိုမဖွင့်မီ၎င်း၏ရည်ရွယ်ချက်ကိုရှင်းလင်းပါ။ ဥပမာအားဖြင့်:

  • ပထမဆုံးအလွှာကို Gzip Compression ( OB_GZHandler ) အတွက်အသုံးပြုသည်။

  • ဒုတိယအလွှာကို HTML အကြောင်းအရာ compression အတွက်အသုံးပြုသည်

  • တတိယအလွှာသည် output sequence ကိုကိုယ်တိုင်ထိန်းချုပ်ရန်ဖြစ်သည်

နမူနာကုဒ်:

 <?php
// output ကိုချုံ့ရန်အသုံးပြုခဲ့သည်
ob_start('ob_gzhandler');

// အတွက်HTMLချုံ့ခြင်း
ob_start(function ($buffer) {
    // ရိုးရှင်းသောဖယ်ရှားရေးHTMLအတွက်အပိုအာကာသ
    return preg_replace('/\s+/', ' ', $buffer);
});

// ပုံမှန် buffering,အတွက်收集页面内容
ob_start();

// လက်ရှိ Buffer စာရင်းကိုပုံနှိပ်ပါ
print_r(ob_list_handlers());
?>

ထိပ်ဖျား: ဝက်ဘ်ဆိုက်ကို gitbox.net domain name အောက်တွင်တပ်ဆင်ထားပါက၎င်းကိုဥပမာ Buffer ရှိ URLs များအတွက်လုပ်ငန်းများ၌ပြုလုပ်နိုင်သည်။

 <?php
ob_start(function($content) {
    return str_replace('http://example.com', 'https://gitbox.net', $content);
});
?>

ဤနည်းအားဖြင့်မည်သည့်ဒိုမိန်းအမည်ကိုမူလကထုတ်ယူခြင်းကိုမူလကဖော်ပြပါစေ, ၎င်းကိုမှန်ကန်သော gitbox.net ဖြင့်အလိုအလျောက်အစားထိုးနိုင်သည်။

2 ။ ပုံမှန် buffer stack status ကိုမှန်မှန်စစ်ဆေးပါ

Buffer Stack သည်ပုံမှန်ဖြစ်ကြောင်းသေချာစေရန်သင် ob_list_handlers () ကိုခေါ်ဆိုနိုင်သည်။

 <?php
function check_output_buffer() {
    $handlers = ob_list_handlers();
    if (empty($handlers)) {
        throw new Exception('အဘယ်သူမျှမ output buffer ပရိုဆက်ဆာကိုရှာတွေ့,ကျေးဇူးပြု။ ကျသင့်ငွေတွက်ပေးပါ ob_start() တယ်လီဖုန်းဆက်ခြင်း。');
    }
}

3 ။ ob_get_level () နှင့် ob_get_status ကို သုံးပါ

  • ob_get_level () လက်ရှိ output buffer ၏အသိုက်အဆင့်ကိုပြန်ပို့သည်

  • ob_get_status () ကြားခံအားလုံး၏အသေးစိတ်အချက်အလက်များကိုပြန်ပို့သည်

ဥပမာ -

 <?php
echo 'လက်ရှိ output ကိုကြားခံအဆင့်:' . ob_get_level();

$status = ob_get_status(true);
foreach ($status as $item) {
    echo 'ပရိုဆဲှသူ:' . $item['name'] . PHP_EOL;
}
?>

၎င်းသည်သင့်အား Layer တစ်ခုစီ၏ပရိုဆက်ဆာနှင့်ပြည်နယ်ကိုရှင်းရှင်းလင်းလင်းမြင်နိုင်ရန်ခွင့်ပြုသည်။

4 ။ ကြားခံကိုပိတ်လိုက်သည့်အခါနောက်ဆက်တွဲတက်ပါစေ

buffering ကို script အဆုံးတွင်ပြောင်းပြန်နိုင်ရန်အတွက်ပိတ်ရန်အကြံပြုသည် -

 <?php
while (ob_get_level() > 0) {
    ob_end_flush();
}
?>

မှတ်ချက် - OB_END_FLUSH () သို့မဟုတ် ob_clean) ကိုအလယ်၌မခေါ်ပါနှင့်။

အကျဉ်းချုပ်

Ob_List_Handlers () နှင့် output buffering အမိန့်ကိုမှန်ကန်စွာစီမံပါ။

  • ကြားခံတစ်ခုချင်းစီ၏အလွှာတစ်ခု၏ရည်ရွယ်ချက်ကိုခွဲခြားသတ်မှတ်ပါ

  • dynamicy buffer stack status ကို dynamicy စောင့်ကြည့်

  • အချိန်အတွက်လုပ်ငန်းစဉ်နှင့်အနီးကပ်ကြားခံ

Portals နှင့် Saas ပလက်ဖောင်းများကဲ့သို့သောရှုပ်ထွေးသောစီမံကိန်းများတွင် ( GitBox.net သို့နေရာချထားမှုများပြုလုပ်သော applications) ကဲ့သို့သောကောင်းမွန်သော output buffering စီမံခန့်ခွဲမှုသည်စာမျက်နှာစွမ်းဆောင်ရည်နှင့်စနစ်တည်ငြိမ်မှုကိုသိသိသာသာတိုးတက်စေနိုင်သည်။

ဤအကြံပြုချက်များကိုအသုံးပြုခြင်းသည်သင်၏ PHP စီမံကိန်းကိုအားကောင်းစေနိုင်သည်။