လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP စွမ်းဆောင်ရည်ညှိအတွက် ob_list_handlers ၏လျှောက်လွှာ

PHP စွမ်းဆောင်ရည်ညှိအတွက် ob_list_handlers ၏လျှောက်လွှာ

gitbox 2025-05-28

PHP Development တွင်ကျွန်ုပ်တို့သည်၎င်းကိုမကြာခဏအသုံးပြုသည်, စာမျက်နှာတင်ခြင်းမြန်နှုန်းကိုတိုးတက်စေရန်, မလိုအပ်သော output ကိုလျှော့ချရန်နှင့် cache control ကိုတိုးမြှင့်ခြင်းများကိုလျှော့ချရန်ကျွန်ုပ်တို့မကြာခဏအသုံးပြုသည်။ သို့သော် developer များစွာသည် ob_start () နှင့် ob_get_contents () နှင့် ရင်းနှီးကျွမ်းဝင်သည်။ စွမ်းဆောင်ရည်ညှိခြင်း, ob_list_handlers () သည်အမှန်တကယ်အသုံးပြုနေသော output buffer processor ကိုနားလည်ပြီးထိန်းချုပ်နိုင်သည့်အလွန်အမင်းထိုးထွင်းသိမြင်နိုင်သောကိရိယာတစ်ခုဖြစ်သည်။

ob_list_handlers () ?

Ob_list_Handlers () သည် PHP မှ PHP မှပေးသော function တစ်ခုဖြစ်ပြီးလက်ရှိ activated output buffer processors အားလုံး၏အမည်များကိုပြန်ပို့ရန်ဖြစ်သည်။ output buffer processor သည် Gzip compression, cache control ကဲ့သို့သော output ကိုအချက်အလက်များကိုလုပ်ဆောင်နိုင်သည့် callback function ဖြစ်သည်။

 print_r(ob_list_handlers());

အောက်ပါအတိုင်း output ကိုဖြစ်လိမ့်မည်:

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

ဆိုလိုသည်မှာလောလောဆယ်တွင်သင်၌ပရိုဆက်ဆာနှစ်ခုဖွင့်ထားသည့်အတွက် Ob_gzhandler သည် Gzip compression အတွက်အသုံးပြုသောပရိုဆက်ဆာဖြစ်သည်။

စွမ်းဆောင်ရည်ညှိကိုဘယ်လိုကူညီသလဲ။

1 ။ မလိုအပ်သောသို့မဟုတ်မိတ္တူပွားရိုက်ကူးမှုပရိုဆက်ဆာများကို detect detect

တစ်ခါတစ်ရံမူဘောင်များ, plugins များသို့မဟုတ်စိတ်ကြိုက်ကုဒ်များကိုမတော်တဆကျော်လွှားနိုင်သည့် OB_START () s နှင့်ဤကြားခံအလွှာများသည်ပုံတူကူးယူခြင်းသို့မဟုတ်ပ conflict ိပက်ခများဖြစ်ပေါ်စေနိုင်သည်။ ob_list_handlers () သင် enabled processor များအားလုံးကိုလျင်မြန်စွာစာရင်းပြုစုပြီးမလိုအပ်သောကြားခံ stacking ကိုစစ်ဆေးနိုင်သည်။

 if (in_array('ob_gzhandler', ob_list_handlers())) {
    // ထပ်ခါတလဲလဲဖြည့်စွက်ခြင်းကိုရှောင်ပါ gzip ပရိုဆဲှသူ
    ob_end_clean(); // သို့မဟုတ် ob_end_flush();
}

2 ။ ရှုပ်ထွေးသောစနစ်များတွင် output ပြ problems နာများကို debing လုပ်ခြင်း

အချို့သောကြီးမားသောစနစ်များ (ဥပမာ CMS သို့မဟုတ် Custom MVC Frameworks ကဲ့သို့) တွင် output content များသည်များသောအားဖြင့် outputed ပြုပြင်ခြင်း, ပျောက်ဆုံးခြင်း, ob_list_handlers () ပြ problem နာ၏ရင်းမြစ်ကိုလျင်မြန်စွာရှာဖွေရန်ကူညီပေးသည့်ပရိုဆက်ဆာများထည့်သွင်းထားကြောင်းသင်ရှင်းရှင်းလင်းလင်းသိနိုင်သည်။

 foreach (ob_list_handlers() as $handler) {
    error_log("Active output buffer: $handler");
}

3 ။ output buffering အမိန့်နှင့်ယုတ္တိဗေဒကိုအကောင်းမြင်ပါ

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

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

 ob_start('sanitize_output'); // သန့်ရှင်းရေးလုပ်သည်HTML
ob_start('ob_gzhandler');    // နောက်ဆုံးgzipချုံ့ခြင်း

output ကိုအမှာစာမမှန်ကန်ပါက၎င်းသည်ချုံ့ခြင်းပျက်ကွက်ခြင်းသို့မဟုတ် HTML formato malfunction ဖြစ်စေနိုင်သည်။

4 ။ ညစ်ညမ်းမှုကို cache ကိုရှောင်ကြဉ်ပါ

အချို့သောကြားခံပရိုဆက်ဆာများသည်အပိုဆောင်း HTML မှတ်ချက်များ, debug အချက်အလက်သို့မဟုတ်စာရင်းအင်းဆိုင်ရာ scripts များထည့်သွင်းနိုင်သည်။ အကယ်. သင်သည်စာမျက်နှာရလဒ်ကို (Redis (သို့) ဖိုင်များသို့စာရေးခြင်းကဲ့သို့သော) ကိုသိမ်းဆည်းလိုပါက OB_List_Handlers () ကို အသုံးပြုရန်အတွက်ဤပရိုဆက်ဆာများကိုသန့်ရှင်းရေးလုပ်ရန်လိုသည်ကိုစစ်ဆေးရန်အတွက်အလွန်လိုအပ်သည်။

 $handlers = ob_list_handlers();
if (in_array('debug_toolbar_output', $handlers)) {
    ob_end_clean(); // သန့်ရှင်းရေးလုပ်သည်调试信息
}

လက်တွေ့ကျသောလျှောက်လွှာဥပမာ - စွမ်းဆောင်ရည်စောင့်ကြည့်လေ့လာခြင်းတွင်အကောင်းဆုံးအလေ့အကျင့်များ

Buffer Processor အချက်အလက်များကို output လုပ်ရန် OB_List_Handlers () ကို အသုံးပြု. ရိုးရိုး logging function ကိုဖန်တီးနိုင်သည်။

 function log_output_buffers() {
    $handlers = ob_list_handlers();
    file_put_contents('/var/log/php_output_buffers.log', print_r($handlers, true));
}

ဤနည်းအားဖြင့်ထုတ်လုပ်မှုပတ် 0 န်းကျင်တွင်နှေးကွေးသော 0 န်ထုပ် 0 င်မှုသို့မဟုတ်ရိုးရာကျောက်တုံးများပါ 0 င်သည့်အခါပြ problem နာ၏ရင်းမြစ်ကိုနားလည်ရန်မှတ်တမ်းကိုသင်လျင်မြန်စွာကြည့်ရှုနိုင်သည်။

ဥပမာ - gzip compression နှင့်စာမျက်နှာ cache ကိုပေါင်းစပ်ခြင်း

 if (!in_array('ob_gzhandler', ob_list_handlers())) {
    ob_start('ob_gzhandler');
}

ob_start(); // အဓိက output ကိုကြားခံ
$pageContent = generatePage(); // ဤသည်စာမျက်နှာမျိုးဆက် function ကိုယူဆ

// cache ကိုသိမ်းဆည်းပါ
file_put_contents('/tmp/cache.html', $pageContent);

// ထုတ်လုပ်မှုစာမျက်နှာ
echo $pageContent;
ob_end_flush();

အကျဉ်းချုပ်

ob_list_handlers () သည်ကြိမ်နှုန်းမြင့်မားခြင်းမဟုတ်ပါ, သင်ကတဆင့်သင်လုပ်နိုင်သည်:

  • သင့်လျော်သော compression ကိုဖွင့်ထားသည့် (ထိုကဲ့သို့သော GZIP) ရှိမရှိစစ်ဆေးပါ။

  • မလိုအပ်သော output ပရိုဆက်ဆာများကြောင့်ဖြစ်ပေါ်လာသောစွမ်းဆောင်ရည်ပြ problems နာများကိုရှောင်ပါ

  • output လုပ်ငန်းစဉ်များအတွက်စနစ်၏ထိန်းချုပ်မှုတိုးတက်အောင်

  • လျင်မြန်စွာ output ကိုပုံမှန်မဟုတ်သောနေရာချထား

နောက်တစ်ခါသင်မသိသော output သို့မဟုတ်စွမ်းဆောင်ရည်မြှ င့ ်တင်မှုများကိုရင်ဆိုင်နေရသည်။

အကယ်. သင်သည် https://gitbox.net/api/pi/v1/data ကဲ့သို့သောစွမ်းဆောင်ရည်မြင့်ဝက်ဘ်ဝန်ဆောင်မှုကိုတီထွင်နေပါကသင်သည် output process ကိုပိုမိုသတိပြုသင့်သည်။ OB_List_Handlers ၏ဆင်ခြင်တုံတရားအသုံးပြုခြင်း () သည်အရည်အသွေးမြင့် Backend ဖွံ့ဖြိုးတိုးတက်မှုအတွက်အဓိကခြေလှမ်းတစ်ခုဖြစ်သည်။