လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ob_list_handlers နှင့် ob_clean: တိကျသော cache သန့်ရှင်းရေးကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း

ob_list_handlers နှင့် ob_clean: တိကျသော cache သန့်ရှင်းရေးကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း

gitbox 2025-05-28

PHP တွင် output buffering သည် script ၏ output belection ကိုထိန်းချုပ်နိုင်သည့် output buffering သည်အစွမ်းထက်သောအင်္ဂါရပ်တစ်ခုဖြစ်သည်။ အထူးသဖြင့် output buffering သည်အထူးသဖြင့် dynamically ပြုပြင်ပြောင်းလဲမှု, cacput ကို cacheing သို့မဟုတ်ယာယီချေမှုန်းခြင်းသို့မဟုတ်ယာယီချေမှုန်းခြင်းခံရသောအခါအထူးအရေးကြီးသည်။ ob_list_handlers () နှင့် ob_clean) သည် Buffer စီမံခန့်ခွဲမှုတွင်အလွန်လက်တွေ့လုပ်ဆောင်ချက်နှစ်ခုရှိသည်။

ဤဆောင်းပါးသည် OB_List_Handlers () နှင့် buffer အကြောင်းအရာများကိုမည်သို့ရှင်းလင်းရမည်ကိုသရုပ်ပြရန် OB_List_) ၏အခန်းကဏ် role ကိုရှင်းပြပါမည်။

1 ။ output buffering ယန္တရားကိုနိဒါန်း

ပုံမှန်အားဖြင့် PHP script ၏ output ကိုကွပ်မျက်ခံရသည့်အခါ browser သို့တိုက်ရိုက်ပို့သည်။ သို့သော် output buffering (ဥပမာ ob_start ) မှတစ်ဆင့် PHP သည်မှတ်ဉာဏ်တွင် output compute ကိုယာယီသိမ်းဆည်းခြင်းအားဖြင့် PHP သည်မှတ်ဥာဏ်ကိုယာယီချမှတ်သည်။

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

  • ob_start () - output buffer အသစ်တစ်ခုကိုဖွင့်ပါ

  • ob_get_contentents () - အကြောင်းအရာကိုကြားခံတွင်ရယူပါ

  • ob_clean () : ကြားခံရှင်းလင်းနှင့်ကြားခံပိတ်ပါ

  • ob_clean () : ကြားခံရှင်းလင်းပေမယ့်ကြားခံမပိတ်ပါနှင့်

  • ob_list_handlers () - လက်ရှိဖွင့်ထားသော Buffer Processor ကိုစာရင်းပြုစုပါ

2 ။ OB_List_Handlers () function ကိုအသေးစိတ်ရှင်းပြချက်

ob_list_handlers () သည်လက်ရှိဖွင့်ထားသော output buffers နှင့်၎င်းတို့၏သက်ဆိုင်ရာပရိုဆက်ဆာအမည်များအားလုံးပါ 0 င်သောခင်းကျင်းမှုကိုပြန်ပေးရန်အသုံးပြုသည်။ ဒီ function ကိုအထူးသဖြင့်ရှုပ်ထွေးသော Buffer Control Control Control တွင်ရှိသောလက်ရှိကြားခံ stack ၏ status ကို debugging သို့မဟုတ်တရားစီရင်ခြင်းအတွက်အသုံးပြုသည်။

ဥပမာ -

 ob_start('ob_gzhandler'); // အသုံးပြုgzipချုံ့ခြင်း
ob_start();               // ပုံမှန်ရိုက်ကူးမှုကိုဖွင့်ပါ

print_r(ob_list_handlers());

output ကိုဖြစ်လိမ့်မည်:

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

ဤပြင်ဆင်မှု၏အမိန့်သည် "ပထမနှင့်ထွက်" (lifro) သည် "and out" ဖြစ်သည်။ ဆိုလိုသည်မှာထိပ်ဆုံးကြားခံသည်ခင်းကျင်းရှေ့တွင်ရှိသည်။

3 ။ ob_clean () ၏အခန်းကဏ် and နှင့်အလွဲသုံးစားမှု၏အန္တရာယ်

ob_clean () သည် လက်ရှိထိပ်တန်းကြားခံပါအကြောင်းအရာများကိုရှင်းလင်းလိမ့်မည်, သို့သော်ကြားခံကိုမပိတ်ပါ။ HTTP Header သတင်းအချက်အလက်မပို့မီ output မရှိပါ။

ဥပမာအားဖြင့်:

 ob_start();
echo "ယာယီ output ကို";
ob_clean(); // ကြားခံရှင်းလင်းပါ“ယာယီ output ကို”

အလွဲသုံးစားမှုအန္တရာယ် -

အကယ်. သင်သည် ob_clean ကို မျက်စိကန်းစွာခေါ်ဆိုပါက Multi-Buffer ဇာတ်လမ်းတစ်ပုဒ်တွင်မရှင်းလင်းသင့်သောအကြောင်းအရာများကိုရှင်းလင်းသင့်သည်သို့မဟုတ် compressed / encoding processor ၏ကြားခံကိုရှင်းရှင်းလင်းလင်းမရှင်းလင်းသင့်ပါ။

4 ။ ob_list_handlers () နှင့် ob_clean () ကိုအသုံးပြုပါတိကျသောထိန်းချုပ်မှုအောင်မြင်ရန်

အကယ်. သင်သည်ပရိုဆက်ဆာမျိုးစုံကိုဖွင့်ထားသည့်ပရိုဆက်ဆာမျိုးစုံ (Gzip compression, compressbacks စသည်) ကိုဖွင့်ပါကရှုပ်ထွေးသော buffering အခြေအနေများတွင်ကြားခံသန့်ရှင်းရေးလုပ်သည့်အခါ ချုံ့သည့်ပရိုဆက်ဆာသို့မဟုတ်အခြားသတ်သတ်မှတ်မှတ်အလွှာများသည်မထိခိုက်ပါ ။ ယခုအချိန်တွင်သင်သည် OB_List_Handlers () ကို အသုံးပြုရန်လိုအပ်သည့်လက်ရှိကြားခံ stack ဖွဲ့စည်းပုံကိုဆုံးဖြတ်ရန်နှင့် ob_clean () Ob_clean () ကိုခေါ်ရန်ဆုံးဖြတ်ရန် OB_List_Handlers () ကို အသုံးပြုရန်လိုအပ်သည်။

နမူနာဇာတ်လမ်းတွဲ - ပုံမှန်ကြားခံကိုသာရှင်းရှင်းလင်းလင်းဖော်ပြပါ။ Gzip Compression Layer ကိုမထိခိုက်ပါ

 ob_start('ob_gzhandler'); // ချုံ့ခြင်း处理器
ob_start();               // ပုံမှန် buffer layer

echo "output အကြောင်းအရာကိုပြင်ဆင်ပါ";

// လက်ရှိ buffer stack ကိုရယူပါ
$handlers = ob_list_handlers();

// အကယ်. အမြင့်ဆုံးအလွှာသည်ပုံမှန်ကြားခံဖြစ်ပါက,ရှင်းလင်းသောအကြောင်းအရာ
if (!empty($handlers) && $handlers[0] === 'default output handler') {
    ob_clean();
}

// output ကိုအကြောင်းအရာ
echo "output ကိုသန့်ရှင်းရေး";

// အလှည့်အတွက် buffering ပိတ်ပါ
while (ob_get_level() > 0) {
    ob_end_flush();
}

5 ။ လက်တွေ့ application တစ်ခု - cache ညစ်ညမ်းမှုသို့မဟုတ်အစောပိုင်း output ကိုကာကွယ်တားဆီး

အသုံးပြုသူသည် log in ဝင်. JSON Error တုန့်ပြန်မှုကိုပြန်မရသောအခါသင်ကွပ်မျက်ခြင်းကိုဖျက်သိမ်းရန်လိုအပ်သည့် API interface တစ်ခုတည်ဆောက်ရန်လိုအပ်သည်ဆိုပါစို့။ သို့သော်အချို့သော module များသည်ကြိုတင်ပြင်ဆင်မှုရှိနိုင်သည်။ ဤအချိန်တွင်သင်သည် ob_clean () နှင့် ob_list_handlers () ကို ပေါင်းစပ်နိုင်သည်။

 ob_start(); // buffering ဖွင့်

// 某些模块可能提前output ကိုအကြောင်းအရာ
include 'some_module.php'; // ဒီ module တစ်ခုပါဝင်နိုင်သည် echo အသေအချာပေြာဆိုချက်

// ဆီလျှော် output ကိုတက်သန့်ရှင်း
if (in_array('default output handler', ob_list_handlers())) {
    ob_clean();
}

// စံသို့ပြန်သွားရန်JSONတုံ့ပြန်ချက်
header('Content-Type: application/json');
echo json_encode([
    'status' => 'error',
    'message' => 'ကျေးဇူးပြုပြီး system ကိုအရင်ဝင်ပါ。'
]);

ob_end_flush(); // output ကိုပေးပို့ပါ

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

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

ob_list_handlers () output buffer ပြည်နယ်ကိုလေ့လာခြင်းနှင့် debing လုပ်ရန် အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကို ob_clean နှင့်ပေါင်းစပ်အသုံးပြုသောအသုံးပြုမှုကိုရှုပ်ထွေးသော Buffer Stack တွင် misclearing content ကိုရှောင်ရှားနိုင်ပြီး output control ၏တိကျမှန်ကန်မှုနှင့်တည်ငြိမ်မှုကိုတိုးတက်စေသည်။

ချုံ့ထားသောရလဒ်များ, အသိုက်ထိုးခြင်းနှင့် modular output ကိုအသုံးပြုခြင်းသည်ဤလုပ်ဆောင်မှုနှစ်ခုကို အသုံးပြု. သင့်အားပိုမိုတည်ငြိမ်။ ထိန်းချုပ်နိုင်သောထုတ်လုပ်မှုမဟာဗျူဟာကိုတည်ဆောက်ရန်အထောက်အကူပြုလိမ့်မည်။ အကယ်. သင့်တွင်ပါဝင်မှု output output output ကိုပါ 0 င်ခြင်းသို့မဟုတ် SEO-Friendly static cache လုပ်ခြင်းစွမ်းရည်လိုအပ်ပါကဤတွင်ဤကြားခံထိန်းချုပ်မှုမဟာဗျူဟာကိုမိတ်ဆက်ရန်အထူးအကြံပြုလိုပါသည်။