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

ရှုပ်ထွေးသော cache ထိန်းချုပ်မှုအတွက် ob_list_handlers ၏အဆင့်မြင့်လျှောက်လွှာ

gitbox 2025-05-29

PHP တွင် output buffering သည် developer များအား script output ၏အချိန်နှင့်အမှာစာများကိုထိန်းချုပ်ရန်ခွင့်ပြုသည့်အလွန်လက်တွေ့အင်္ဂါရပ်တစ်ခုဖြစ်သည်။ ပုံမှန်အားဖြင့် PHP ၏ output ကို client ကိုချက်ချင်းပို့သည်, output buffering ကိုဖွင့်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဤရလဒ်များကို server memory တွင်ပထမဆုံးအကြိမ်သိမ်းဆည်းထားပြီး,

ရှုပ်ထွေးသော cache control သို့မဟုတ် Multi-layer buffering logic နှင့်ဆက်ဆံရာတွင်၎င်းသည် ob_list_handlers () function ကိုအသုံးပြုခြင်းကိုနားလည်ရန်နှင့်ကျွမ်းကျင်ရန်အရေးကြီးသည်။ ဤဆောင်းပါးသည် Ob_list_Handlers ကို မည်သို့အသုံးပြုရမည်ကိုရှင်းပြရန်ဥပမာအားဖြင့် output buffer များကိုပိုမိုထိထိရောက်ရောက်ကိုင်တွယ်ဖြေရှင်းရမည်,

ob_list_handlers () ?

ob_list_handlers () သည်လက်ရှိ activated output buffer ပရိုဆက်ဆာများအားလုံး၏အမည်ကိုရရှိသော function တစ်ခုဖြစ်သည်။ ၎င်း၏ Return Value သည် stack order (နောက်ဆုံးပေါ်နောက်ဆုံးပေါ်) တွင်လက်ရှိကြားခံပရိုဆက်ဆာများကိုစာရင်းပြုစုထားသည့် array တစ်ခုဖြစ်သည်။

 array ob_list_handlers ( void )

output buffering ၏ multi-layer ဖွဲ့စည်းပုံ

output buffer သည် PHP တွင် stack stack ဖွဲ့စည်းပုံတစ်ခုအဖြစ်တည်ရှိသည်။ Ob_start () ကိုခေါ်သည့်အခါတိုင်း Processor အသစ်တစ်ခုကို Stark ၏ထိပ်တွင်ထည့်သွင်းလိမ့်မည်။

အဓိပ်ပါယျမှာ:

  • Processor ၏အလွှာတစ်ခုစီသည်၎င်းကိုလက်ခံရရှိသည့်အရာကိုပြုပြင်နိုင်သည်။

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

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

 ob_start('strtoupper');       // တတိယထပ်:အကြောင်းအရာများကိုအရင်းအနှီးသို့ပြောင်းပါ
ob_start('trim');             // ဒုတိယထပ်:အစနှင့်အဆုံးကွက်လပ်များကိုဖယ်ရှားပါ
ob_start();                   // ပထမထပ်:မူရင်းအကြောင်းအရာ

ယခုအချိန်တွင် OB_List_Handlers () သည် အောက်ပါအကြောင်းအရာများကိုပြန်ပေးလိမ့်မည်။

 Array
(
    [0] => default output handler
    [1] => trim
    [2] => strtoupper
)

ရှုပ်ထွေးသော cache ထိန်းချုပ်မှုအတွက်လျှောက်လွှာ

Gzip compression, HTML compression and custom သစ်ထုတ်လုပ်ခြင်းကိုပေါင်းစပ်ထားသောစာမျက်နှာ cache system ကိုသင်တီထွင်နေသည်ဆိုပါစို့။ အောက်ပါကြားခံကွင်းဆက်ကိုသင်အသုံးပြုနိုင်သည်ဆိုပါစို့။

 ob_start('ob_gzhandler');     // အထပ်1:GZIPချုံ့ခြင်း
ob_start('custom_html_minify'); // အထပ်2:HTMLချုံ့ခြင်း
ob_start('log_output');       // အထပ်3:သစ်ခုတ်

ဤပရိုဆက်ဆာများကိုဖြေရှင်းရန်သို့မဟုတ်လုပ်ဆောင်နေစဉ်အတွင်း buffer stack ၏ဖွဲ့စည်းပုံကိုဆုံးဖြတ်ရန် OB_List_Handlers () ကိုသုံးနိုင်သည်။

ဥပမာ - ပရိုဆက်ဆာတစ် ဦး အလွှာကို dynamically ပိတ်ထားသည်

 $handlers = ob_list_handlers();

foreach ($handlers as $handler) {
    if ($handler === 'log_output') {
        ob_end_flush(); // သို့မဟုတ် ob_end_clean(),စီးပွားရေးလိုအပ်ချက်အပေါ်မူတည်သည်
    }
}

၎င်းသည်မှတ်တမ်းအကြောင်းအရာများကိုမှတ်တမ်းတင်ခြင်းသို့မဟုတ်အချို့သောအခြေအနေများအောက်တွင် logging ကိုပိတ်ခြင်းကိုရှောင်ရှားသည်။

လက်တွေ့ - စာမျက်နှာ cache နှင့်ပေါင်းစပ်ထားသောအမှုများကိုသုံးပါ

အောက်ဖော်ပြပါဥပမာသည်အမှန်တကယ်ဇာတ်လမ်းနှင့်ပိုမိုနီးကပ်သောဥပမာတစ်ခုဖြစ်သည်။

 // စာမျက်နှာ cache ကိုယုတ္တိဗေဒ
function cache_page_output($buffer) {
    $cache_file = '/tmp/page_' . md5($_SERVER['REQUEST_URI']) . '.html';
    file_put_contents($cache_file, $buffer);
    return $buffer;
}

// 注册输出缓冲အထပ်
ob_start('ob_gzhandler');                // GZIPချုံ့ခြင်း
ob_start('cache_page_output');          // ဖိုင်မှ cache
ob_start();                             // မူရင်း output ကို

echo "<html><body>အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် <a href=\"https://gitbox.net/\">GitBox</a></body></html>";

// လက်ရှိ Buffer Processor ကိုကြည့်ပါ
print_r(ob_list_handlers());

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

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

ဤအချိန်တွင်ကျွန်ုပ်တို့သည် cache ကိုယာယီခုန်ကျော်သွားသကဲ့သို့လိုအပ်သည့်ကြားခံအလွှာတစ်ခုကိုပြုလုပ်နိုင်သည်။

 if ($_GET['nocache'] ?? false) {
    ob_end_flush(); // အပြီးသတ် cache_page_output 这一အထပ်
}

မှတ်စုများနှင့်အကောင်းဆုံးအလေ့အကျင့်များ

  • Buffering ယန္တရားကိုအစဉ်အမြဲနားလည်ပါ။ Stacks အစဉ်အလာတွင်အမြဲတမ်းနားလည်ပါ။

  • ob_list_handlers () ကို အသုံးပြုခြင်း () ကြားခံအလွှာကို debging လုပ်သည့်အခါအကြီးအအကူအညီများကိုအသုံးပြုနိုင်သည်။

  • ကြားခံအားလုံးကိုလုံးဝသန့်ရှင်းရေးလုပ်ရန် (ob_get_level ()) ob_end_level ()) ကိုသင်အသုံးပြုနိုင်သည်။

  • output buffer အားလုံးသည်ကိုယ်တိုင် (သို့မဟုတ် end_flush ()) သို့မဟုတ် end_flush ()) ကို လက်ဖြင့်ပြုလုပ်ရမည်ကိုမမေ့ပါနှင့်။ ဇာတ်ညွှန်းမစခင်အကြောင်းအရာကိုမပို့နိုင်ပါ။

အကျဉ်းချုပ်

ရှုပ်ထွေးသော Cache Control Control STRASS () Ob_list_Handlers () သည် PHP output buffer layer အတွက် Visual Support ကို Visual Support ကိုထောက်ပံ့ပေးသည်။ ob_start () နှင့် ob_end_flush () ကဲ့သို့သောလုပ်ဆောင်ချက်များကိုပေါင်းစပ်ခြင်း, သိုလှောင်ခြင်း, သစ်ထုတ်လုပ်ခြင်း, filtering စသည်ဖြင့်ပြုလုပ်နိုင်သည်။

output buffering ယန္တရားနှင့် ob_list_handlers များ () ကို အသုံးပြု. (), အထူးသဖြင့်ရေနစ်သညင်းအခြေခံတည်ဆောက်ပုံကိုတည်ဆောက်သည့်အခါပိုမိုထိရောက်သော,