လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ထိရောက်သော Cache Cleaning အောင်မြင်ရန် OB_List_Handlers နှင့် ob_flush ပေါင်းစပ်ခြင်း

ထိရောက်သော Cache Cleaning အောင်မြင်ရန် OB_List_Handlers နှင့် ob_flush ပေါင်းစပ်ခြင်း

gitbox 2025-05-20

PHP ၏ output control တွင် ob_list_handlers () နှင့် ob_flush () နှင့် ob_flush () သည်အလွန်လက်တွေ့လုပ်ဆောင်ချက်နှစ်ခုရှိသည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုသည်သူတို့ကိုယ်ပိုင်အသုံးပြုမှုတွင်ရှုပ်ထွေးမှုမရှိပါက cache သန့်ရှင်းရေးမဟာဗျူဟာနှင့်ပေါင်းစပ်ခြင်းများပြုလုပ်နိုင်သည်မှာ၎င်းတို့အား cache သန့်ရှင်းရေးနှင့်ပေါင်းစပ်ပြီးထိရောက်သောထိန်းချုပ်နိုင်သည့်ကြားခံစီမံခန့်ခွဲမှုယန္တရားကိုဖန်တီးနိုင်သည်။

ဤဆောင်းပါးသည် ob_list_handlers () ob_list_handlers () ကိုအသေးစိတ်လေ့လာသုံးသပ်ပြီး broanular cache ကိုစီမံခန့်ခွဲရန် Ob_flush () ကိုမည်သို့အသုံးပြုရမည်ကိုသရုပ်ဖော်ရန်အမှန်တကယ်ဥပမာများကိုအသုံးပြုလိမ့်မည်။

1 ။ PHP ၏ output buffering ယန္တရားကိုနားလည်ပါ

PHP ၏ output buffering ယန္တရားသည် developer များက developer များအနေဖြင့်အချက်အလက်များကိုမဖော်ပြမီအကြောင်းအရာများကိုမှတ်ဉာဏ်ကြားခံတွင်သိမ်းဆည်းရန်ခွင့်ပြုသည်။ ဒီယန္တရားကတဆင့်ငါတို့လုပ်နိုင်တယ် -

  • စာမျက်နှာကွပ်မျက်မှုကာလအတွင်း output အကြောင်းအရာများကို dynamically ပြုပြင်မွမ်းမံခြင်း,

  • ခေါင်းစီးမှပေးပို့သောအမှားများကိုရှောင်ပါ။

  • ပါဝင်မှု compression နှင့် cacheing အဖြစ်အလယ်အလတ်ပြုပြင်ခြင်းယုတ္တိဗေဒကိုအကောင်အထည်ဖော်ပါ။

output buffering အတွက်လုပ်ဆောင်ချက်များမှာ -

  • ob_start () : ကြားခံကိုဖွင့်;

  • ob_get_contents () - လက်ရှိကြားခံအကြောင်းအရာကိုရယူပါ။

  • ob_flush () : Refresh (Send) 0 န်ဆောင်မှုခံယူသူအား 0 န်ဆောင်မှုခံယူသူအား (Send) ။

  • ob_clean () - ကြားခံရှင်းလင်းပြတ်သားစွာပိတ်ပါ။

  • ob_list_handlers () : လက်ရှိကြားခံပရိုဆက်ဆာအားလုံးကိုကြည့်ပါ။

2 ။ ob_list_handlers (): လက်ရှိကြားခံ stack စူးစမ်းပါ

ob_list_handlers () လက်ရှိ output buffer တွင်မှတ်ပုံတင်ထားသောပရိုဆက်ဆာအားလုံးကိုယ်စားပြုသောခင်းကျင်းမှုကိုပြန်လည်ရောက်ရှိစေသည်။ ဥပမာအားဖြင့်, Gzip Compression ကိုဖွင့်ထားလျှင်, အောက်ပါတို့ကိုပြန်ပေးလိမ့်မည်။

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

ဤလုပ်ဆောင်မှုသည် Buffered ပြည်နယ်ကိုရှုပ်ထွေးသောပတ်ဝန်းကျင်တွင် debugging လုပ်ခြင်းအတွက်အလွန်သင့်လျော်သည်။ ဥပမာအားဖြင့်အချို့သောမူဘောင်များသို့မဟုတ် plug-ins သည် buffer processor ကိုအလိုအလျောက်မှတ်ပုံတင်ခြင်း, ပုံမှန်မဟုတ်သောထုတ်လုပ်မှုအပြုအမူများကိုပြုလုပ်နိုင်ပြီးပုံမှန်မဟုတ်သောထုတ်လုပ်မှုအပြုအမူများကိုပြုလုပ်နိုင်သည်။

ဥပမာ - လက်ရှိ Buffer Processor ကိုကြည့်ပါ

 ob_start('ob_gzhandler');
ob_start();

print_r(ob_list_handlers());

// ထုတ်လုပ်ခြင်း:Array ( [0] => ob_gzhandler [1] => default output handler )

3 ။ ob_flush (): လိုအပ်သလို cachred content ကို refresh

ob_flush () သည် လက်ရှိကြားခံပါ 0 င်သော client ကို client သို့ပို့လိမ့်မည်။ သို့သော်ကြားခံကိုမပိတ်ပါ။ များသောအားဖြင့်ကြီးမားသောဒေတာအပြောင်းအလဲနဲ့သို့မဟုတ်ရှည်လျားသောမဲရုံများကဲ့သို့သော streaming output ကိုများအတွက်အသုံးပြုခဲ့သည်။

ဥပမာ - အသုတ် output ကိုအပိုင်းအစ

 ob_start();

for ($i = 1; $i <= 5; $i++) {
    echo "Processing chunk $i\n";
    ob_flush(); // 立即ထုတ်လုပ်ခြင်း
    flush();    // ဒေတာကိုလက်ခံရရှိရန် browser ကိုအတင်း
    sleep(1);   // အချိန် - စားသုံးခြင်းခြင်း simulation processing
}

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

4 ။ ob_flush နှင့်အတူ ob_list_handlers ပေါင်းစပ်: dynamic cache control control မဟာဗျူဟာ

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

  • လက်ရှိကြားခံ status ကိုဆုံးဖြတ်ရန် ob_list_handlers () ကို သုံးပါ။

  • Ob_flush () သို့မဟုတ် ob_end_flush () ကိုအသုံးပြုသင့်သည်ကိုဆုံးဖြတ်ပါ။

အမှန်တကယ်ကိစ္စ - Processor အမျိုးအစားအရ Smart Refresh

အကြောင်းအရာများတွင်ပုံတူပွားခြင်းသို့မဟုတ် encoding အမှားများကိုရှောင်ရှားရန်သတ်သတ်မှတ်မှတ် output processor များတည်ရှိသောအခါသင်လန်းဆန်းစေလိုသည်ဆိုပါစို့။

 ob_start('ob_gzhandler');
ob_start();

$content = "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် https://gitbox.net/api/info \n";

echo $content;

$handlers = ob_list_handlers();

if (!in_array('ob_gzhandler', $handlers)) {
    ob_flush();
    flush();
} else {
    // gzipလုပ်ကိုင်ခြင်း,နှောင့်နှေး Refresh
    error_log('အသုံးပြု ob_gzhandler,延迟ထုတ်လုပ်ခြင်း。');
}

Ob_gzhandler တည်ရှိရှိမရှိဤယုတ္တိဗေဒသည်အလိုအလျောက်ဆုံးဖြတ်လိမ့်မည်။ အကယ်. ၎င်းသည်တည်ရှိပါက output ကိုနှောင့်နှေးလိမ့်မည်။

5 ။ အားလုံးကြားခံသန့်ရှင်းရေးလုပ်ဖို့လက်တွေ့လုပ်ဆောင်ချက်များကို

တက်ကြွသောကြားခံအားလုံးကိုရှင်းလင်းရန် function တစ်ခုကိုသင် encapsate လုပ်နိုင်သည်။

 function clear_all_buffers() {
    while (ob_get_level() > 0) {
        ob_end_clean();
    }
}

ဤနည်းလမ်းသည်အထူးကြပ်မတ်ကိုင်တွယ်ခြင်း,

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

စွမ်းဆောင်ရည်မြင့်မားသော PHP applications များတွင်အထူးသဖြင့်အကြောင်းအရာချုံ့ခြင်း, ob_list_handlers () ob_flush () ob_flush () ob_flush () ob_flush () သည် အမြင်အာရုံကြားခံပရိုဆက်ဆာမြင်ကွင်းကိုဖော်ပြထားသည်။

ကျိုးကြောင်းဆီလျော်သောပေါင်းစပ်ခြင်းနှင့်ယုတ္တိဆိုင်ရာတရားစီရင်ခြင်းအားဖြင့်၎င်းကိုအောင်မြင်နိုင်သည်။

  • ပိုပြီးပြောင်းလွယ်ပြင်လွယ် cacacing မဟာဗျူဟာ;

  • အရင်းအမြစ်များနည်းပါးလာခြင်း,

  • ပိုပြီးထိန်းချုပ်မှုစာမျက်နှာ output ကိုအပြုအမူ။