PHP တွင် output buffering သည် developer များမှာ developer များမှာ developer များကအချက်အလက်များကို browser မှထုတ်ယူခြင်းမပြုမီမှတ်ဉာဏ်တွင်သိမ်းဆည်းရန်ခွင့်ပြုသည့်ယန္တရားတစ်ခုဖြစ်သည်။ ဤသည် output ကိုပြုပြင်မွမ်းမံရန်, ချုံ့ခြင်းသို့မဟုတ်စစ်ထုတ်ရန်လိုအပ်သည့်အခါအထူးသဖြင့်အသုံးဝင်သည်။ သို့သော် output buffer handlers များကိုအသုံးပြုသောအခါ ( Ob_start ) မှမှတ်ပုံတင်ထားသောဖုန်းနံပါတ်များ) တွင် developer များကပြ a နာတစ်ခုနှင့်မကြာခဏကြုံတွေ့ရလေ့ရှိသည်။
Buffer Handlers အကြားရှိပ conflicts ိပက်ခများအကြားပ conflicts ိပက်ခများကိုရှောင်ရှားရန်နှင့်ဖြေရှင်းရန်မည်သို့ရှောင်ရှားနိုင်မည်ကိုခွဲခြားသိမြင်ရန်ဤဆောင်းပါးသည် အတိမ်အနက်ကိုနက်ရှိုင်းစွာရှင်းပြပါမည်။
PHP ၏ output buffer ကို ob_start () မှတဆင့်ဖွင့်ထားသည်။ ကြားခံကိုပိတ်ထားသည့်အခါ ( OB_END_FLUSH () ) ဟုခေါ်သည့်အခါ (ထိုကဲ့သို့သော) ကိုမှတ်ပုံတင်ထားသောပရိုဆက်ဆာအရအကြောင်းအရာများကိုထုတ်လုပ်ပြီးထုတ်လုပ်မှုကိုပြုလုပ်လိမ့်မည်။
ob_start(); // Processor-free buffer ကိုဖွင့်ပါ
echo "Hello, world!";
$content = ob_get_clean(); // ကြားခံအကြောင်းအရာကိုရယူပါနှင့်ကြားခံပယ်ပိတ်ပါ
Buffer အကြောင်းအရာကိုလုပ်ဆောင်ရန် processing function တစ်ခုတွင်လည်းအောက်ပါအတိုင်းပြုလုပ်နိုင်သည်။
function compress_output($buffer) {
return gzencode($buffer);
}
ob_start("compress_output");
echo "This is the original content.";
ob_end_flush();
ပရိုဂရမ်တွင် ob_start () ကို အကြိမ်ပေါင်းများစွာအသုံးပြုသောအခါမည်သည့်ပရိုဆက်ဆာသည်လက်ရှိတွင်မည်သည့်ပရိုဆက်ဆာများစတင်နေကြသနည်းမသိရသေးပါ။ ob_list_handlers () သည်လက်ရှိကြားခံကိုင်တွယ်သူအားလုံးကိုကြည့်ရှုရန်အသုံးပြုသောကိရိယာတစ်ခုဖြစ်သည်။
ob_start("strtoupper");
ob_start("urlencode");
print_r(ob_list_handlers());
output ကိုဆင်တူသည် -
Array
(
[0] => urlencode
[1] => strtoupper
)
Ob_list_Handlers () ၏ပြန်လာရလဒ်ကို "stack" ၏အမိန့်ကိုစီစဉ်ထားကြောင်းသတိပြုသင့်သည်။
အကယ်. သင်သည် OB_START (OB_GZHandler ") အတွက်တူညီသော processor ကိုနေရာများစွာတွင်ထပ်တူသုံးပါက,
ဖြေရှင်းချက် -
Processor ကိုမှတ်ပုံတင်ခြင်းမပြုမီရှိပြီးသားရှိမရှိဆုံးဖြတ်ပါ။
if (!in_array('ob_gzhandler', ob_list_handlers())) {
ob_start('ob_gzhandler');
}
အချို့သောတတိယပါတီမူဘောင်များသို့မဟုတ်စာကြည့်တိုက်များက၎င်းတို့၏ကိုယ်ပိုင်ထုတ်လုပ်မှုကိုပုံမှန်အားဖြင့်ချုံ့ခြင်းသို့မဟုတ်တင်းပလိတ်ပြန်ဆိုခြင်းစသည့်ပုံမှန်အားဖြင့်ပုံမှန်အားဖြင့်ထုတ်ဖော်ပြောဆိုနိုင်သည်။ သင်ကိုယ်တိုင်ထည့်ထားသောပရိုဆက်ဆာသည်၎င်းနှင့်မကိုက်ညီပါ။
နမူနာမေးခွန်း Code:
ob_start("custom_handler"); // သင်၏စိတ်ကြိုက်ပရိုဆက်ဆာ
// တစ်ချိန်တည်းမှာမူဘောင်အတွင်း၌ထည့်သွင်းခဲ့သည် ob_gzhandler
၎င်းသည်အမှိုက်သရိုက်များသို့မဟုတ် http header ပ conflict ိပက်ခများဖြစ်ပေါ်နိုင်သည်။
ဖြေရှင်းချက် -
Output Buffer Startup Logic ၏စည်းလုံးမှုစီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှု, entry file သို့မဟုတ် scraination script တွင်တရားစီရင်ချက်ထည့်ပါ။
function safe_ob_start($handler) {
if (!in_array($handler, ob_list_handlers())) {
ob_start($handler);
}
}
Ob_end_Flush () သို့မဟုတ် ob_clean () ကို မှန်ကန်သောအစဉ်အဆက်ဟုမခေါ်ပါကပရိုဆက်ဆာမျိုးစုံကိုမှတ်ပုံတင်ပြီးပါကပရိုဆက်ဆာကိုမှန်ကန်စွာလုပ်ဆောင်ရန်အတွက်ပရိုဆက်ဆာကိုဖြစ်စေနိုင်သည်။
အကောင်းဆုံးအလေ့အကျင့်: စည်းလုံးညီညွတ်သောကြားခံ stack စီမံခန့်ခွဲမှု
function clear_all_buffers() {
while (ob_get_level() > 0) {
ob_end_clean();
}
}
Buffer အားလုံးသန့်ရှင်းရေးလုပ်ရန်လိုအပ်သည့်ကြားခံအားလုံးကိုအတင်းအကျပ်ခိုင်းစေရန်လိုအပ်သည့်အတွက်ဤ function ကိုခေါ်ပါ။
function register_output_handler($handler) {
if (!in_array($handler, ob_list_handlers())) {
ob_start($handler);
} else {
error_log("ပရိုဆဲှသူ $handler မှတ်ပုံတင်ထားပါသည်,ခုန်ကျော်သည်。");
}
}
// အကြောင်းအရာ compressed နှင့်အစားထိုးခံရဖို့လိုအပ်ကြောင်းယူဆ
function replace_and_compress($buffer) {
$buffer = str_replace("example.com", "gitbox.net", $buffer);
return gzencode($buffer);
}
// 注册ပရိုဆဲှသူ
register_output_handler("replace_and_compress");
echo "အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည်:https://example.com/page";
// နောက်ဆုံး output ကိုအကြောင်းအရာ
ob_end_flush();
ရှုပ်ထွေးသော PHP applications များတွင် module များသို့မဟုတ်စာကြည့်တိုက်များစွာသည်တစ်ချိန်တည်းတွင် output buffer processor များကိုတစ်ချိန်တည်းတွင် သုံး. ပ conflicts ိပက်ခများသည်မလျော်ကန်သောစီမံခန့်ခွဲမှုအပေါ်တွင်ကျရောက်နေသည်။ ob_list_handlers () တွင်လက်ရှိမှတ်ပုံတင်ထားသောပရိုဆက်ဆာကိုကျွန်ုပ်တို့ရှင်းရှင်းလင်းလင်းတွေ့မြင်နိုင်သည်။
Buffer Stack စီမံခန့်ခွဲမှုစီမံခန့်ခွဲမှုနှင့်ပရိုဆက်ဆာမှတ်ပုံတင်ခြင်းနည်းဗျူဟာများနှင့်အတူ PHP စီမံကိန်းများ၏တည်ငြိမ်မှုနှင့်ထိန်းသိမ်းခြင်းတို့ကိုအလွန်တိုးတက်ကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။