PHP ၏ Output Buffering ယန္တရားကိုအသုံးပြုသောအခါအကြောင်းအရာများ၏ output ကိုထိန်းချုပ်ရန် OB_Start () နှင့် ob_get_contents ကဲ့သို့သောလုပ်ဆောင်မှုများကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ ဤကိရိယာများသည်တင်းပလိတ်အင်ဂျင်များ, cache gen မျိုးဆက်, စာမျက်နှာချုံ့ခြင်းနှင့်အခြားအခြေအနေများတွင်အလွန်တွေ့ရလေ့ရှိသည်။ သို့သော်မတော်တဆကိုင်တွယ်လျှင်၎င်းသည်သိမ်းဆည်းထားသည့်အကြောင်းအရာများကိုအပူပေးနိုင်သည့်အချိန်ကိုအကြိမ်ကြိမ်ဖြစ်စေသည်။ ၎င်းသည်စာမျက်နှာ၏ပုံမှန် display ကိုအကျိုးသက်ရောက်လိမ့်မည်။
လက်တွေ့ကျကျနှင့်အလွယ်တကူလျစ်လျူရှုထားသည့်လုပ်ဆောင်ချက်တစ်ခုမှာ ob_list_handlers () ဖြစ်သည်။ ၎င်းသည်လက်ရှိဖွင့်ထားသည့်ကြားခံကိုင်တွယ်သူအားလုံးကိုကြည့်ရှုရန်ကူညီသည်။ ၎င်းကိုမှန်ကန်စွာအသုံးပြုခြင်းသည်ထပ်ခါတလဲလဲ output ကိုထုတ်ယူခြင်းမှ output buffer ၏ပြ problem နာကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။
PHP ၏ output buffer သည် manual flush ပြီးစီးသည်အထိ Output ကိုအကြောင်းအရာများကိုမှတ်ဉာဏ်သို့သိမ်းဆည်းရန်ခွင့်ပြုသည်။ ဒါကကျွန်တော်တို့ကိုကူညီနိုင်တယ်။
အကြောင်းအရာများကိုမဖော်ပြမီ HTTP Header အချက်အလက်များကိုပြင်ဆင်ပါ။
cached content ကိုထိန်းချုပ်မှု;
output ကိုအကြောင်းအရာကိုချုံ့သို့မဟုတ် filter ။
အခြေခံအသုံးပြုမှုဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
ob_start();
echo "Hello, World!";
$content = ob_get_contents();
ob_end_clean();
ဒီကုဒ်ထဲမှာ "မင်္ဂလာပါကမ္ဘာ!" ကြားခံသို့ output ကိုထုတ်ယူခြင်းသည်ဒေါ်လာဖြစ်သော $ အကြောင်းအရာ အဖြစ်ထုတ်ယူသည် ။
ob_list_handlers () သည်လက်ရှိ output output ကိုဖြေရှင်းရန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။
ဥပမာအားဖြင့်:
ob_start();
ob_start('ob_gzhandler');
print_r(ob_list_handlers());
အောက်ပါအတိုင်း output ကိုဖြစ်လိမ့်မည်:
Array
(
[0] => ob_gzhandler
[1] => default output handler
)
တစ်ခုချင်းစီကို processor ကိုဖြစ်စဉ်များကို stark ထုံးစံ၌ output ကို buffered ။ အကယ်. သင်သည်ကြားခံဟောင်းကိုမသန့်ရှင်းပါကအကြောင်းအရာသည်ထပ်တလဲလဲသို့မဟုတ် output ကိုထပ်ခါတလဲလဲပြုလုပ်နိုင်သည်။
ရှုပ်ထွေးသောစီမံကိန်းများတွင်ကျွန်ုပ်တို့သည်ကိုယ်ပိုင် output buffering ကိုဖွင့်နိုင်သည့်အစိတ်အပိုင်းများစွာကိုအသုံးပြုလေ့ရှိသည်။ အကယ်. ကြားခံအဆင့်သည်စည်းလုံးညီညွတ်မှုမရှိပါကအောက်ပါပြ problems နာများကိုအလွယ်တကူကြုံတွေ့ရနိုင်သည်။
cache ပါဝင်မှု output ကိုအကြိမ်ပေါင်းများစွာ;
output ကိုအမှာစာသည်ကိုက်ညီမှုမရှိပါ။
အဆိုပါကြားခံကိုမှန်ကန်စွာမပိတ်ထားပါ။
Ob_get_level () လက်ရှိကြားခံအဆင့်ကိုရှာဖွေရန်နှင့်ထပ်ခါတလဲလဲခေါ်ဆိုမှုများကိုရှောင်ရှားရန်။
if (ob_get_level() === 0) {
ob_start();
}
သင်ကဲ့သို့သောပရိုဆက်ဆာကိုဖွင့်ထားသည့်ပရိုဆက်ဆာကိုဖွင့်ထားနိုင်ခြင်းရှိမရှိရှာဖွေရန်အထောက်အကူပြုသူကိုသင်ရေးနိုင်သည်။
function has_ob_handler($handler_name) {
return in_array($handler_name, ob_list_handlers());
}
if (!has_ob_handler('ob_gzhandler')) {
ob_start('ob_gzhandler');
}
ဤကုဒ်သည် ob_gzhandler ကို အကြိမ်ကြိမ်မှတ်ပုံတင်ခြင်းမှကာကွယ်ပေးသည်။
မည်သည့် buffer ကိုဖွင့်ထားကြောင်းသင်မသေချာပါက၎င်းတို့ကိုရှင်းလင်းရန်အောက်ပါနည်းလမ်းများကိုသုံးနိုင်သည်။
while (ob_get_level() > 0) {
ob_end_clean();
}
၎င်းသည်ပြ problems နာများဖြစ်ပေါ်စေခြင်းမှကာကွယ်ရန်ကြားခံအဆင့်များကိုကာကွယ်ရန်အတွက်ဤအချက်ကိုဘောင်များသို့မဟုတ်အဓိကထိန်းချုပ်သူများအတွက်အသုံးပြုသည်။
$url = 'https://gitbox.net/cache/homepage.html';
// buffering စတင်ပါ
if (ob_get_level() === 0) {
ob_start();
}
// analog ပါဝင်မှု output ကို
echo "<h1>အလည်အပတ်ခရီးမှလှိုက်လှဲစွာကြိုဆိုပါသည် Gitbox</h1>";
// carded အကြောင်းအရာကိုချွေတာပါ
$content = ob_get_contents();
file_put_contents('/path/to/cache/homepage.html', $content);
// buffering အဆုံးသတ်,output ကိုအကြောင်းအရာ
ob_end_flush();
အကယ်. script ကိုအကြိမ်ပေါင်းများစွာဟုခေါ်သည် (ထိုကဲ့သို့သော template system ကဲ့သို့) တွင် ob_list_handlers () ကို ကျွန်ုပ်တို့ထည့်သွင်းနိုင်ပါကကြားကြားခြင်းကိုပြန်လည်စတင်ခြင်းမပြုရန်နှင့်အငြင်းပွားမှုများကိုထုတ်ယူခြင်းကိုရှောင်ရှားခြင်းမပြုမီကျွန်ုပ်တို့သည် obffering မစတင်မီ check addsist_handlers () ကိုစစ်ဆေးနိုင်သည်။
ob_list_handlers () ကို အသုံးပြုခြင်းသည်လက်ရှိ output buffering state ကိုရှင်းရှင်းလင်းလင်းနားလည်ရန်ခွင့်ပြုသည်။ ob_get_level () နှင့် ob_clean) ကဲ့သို့သောလုပ်ဆောင်ချက်များကို PHP ၏ output ကိုကြားခံခြင်းသည်အထူးသဖြင့် Template Engines, တည်ဆောက်ခြင်းအင်ဂျင်များ,
ပ conflict ိပက်ခဖြစ်နိုင်ခြေကိုလျှော့ချရန်နှင့်အကြောင်းအရာများကိုပိုမိုထိရောက်စေရန်နှင့်အကြောင်းအရာများကိုပိုမိုထိရောက်စေရန်အတွက် outpo module systems များတွင် output buffering logic ကိုပေါင်းစည်းရန်အကြံပြုသည်။
အပြည့်အဝကြားခံစီမံခန့်ခွဲမှုလူတန်းစားစာတန်းများကိုရည်ညွှန်းအဖြစ်ပေးရန်သင်လိုအပ်ပါသလား။