PHP ၏ stream_bucket_make_make_make_make_make_make_make_make_) function ကိုအသုံးပြုသောအခါအချို့သော developer အချို့ကသူတို့ပြန် မှားယွင်းသော အခြေအနေကိုကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်အဘယ်ကြောင့်ဤလုပ်ဆောင်မှုသည် မှားယွင်းသော ပြန်လာပြီးပြ problems နာများကိုဖြေရှင်းရန်ဘုံနည်းလမ်းများကိုပေးရန်ဤဆောင်းပါးသည်အသေးစိတ်လေ့လာလိမ့်မည်။
Stream_bucket_make_Mwitable () PHP stream filter system တွင်အခြေခံလုပ်ဆောင်ချက်ဖြစ်သည်။ stream filter ကိုစိတ်ကြိုက်ပြုပြင်သည့်အခါ၎င်းကိုစမ်းချောင်းတစ်ခုသို့အချက်အလက်များကိုစမ်းရေဖြင့်ရေးလေ့ရှိသည်။ ၎င်း၏အခြေခံလုပ်ဆောင်ချက်များမှာ -
၎င်းကိုပြုပြင်မွမ်းမံနိုင်ရန်နှင့်စမ်းချောင်းသို့ပြန်ပို့နိုင်ရန်အတွက် 0 င်လာသော ရေပုံး များမှရေးသားနိုင်သည့်ပုံးတစ်လုံးကိုပြန်လည်ရယူရန်ကြိုးစားပါ။
အောက်ပါအတိုင်းလုပ်ဆောင်ချက်ကိုအောက်ပါအတိုင်းခေါ်ဆိုသည် -
$bucket = stream_bucket_make_writeable($in);
$ INCION သည် Bucket တပ်မဟာတစ်ခုဖြစ်သည့်လက်ရှိတွင် Passed filter ၏အချက်အလက်တန်းစီကိုကိုယ်စားပြုသည်။
အောင်မြင်ပါက function သည် ပုံး အရာဝတ်ထုကိုပြန်ပို့သည်။ မအောင်မြင်ပါက မှားသည် ။
ဤလုပ်ဆောင်မှုသည်ဤလုပ်ဆောင်ချက်အရ မှားယွင်းသောအ ယူမှားသည်များသောအားဖြင့်လက်ရှိတွင်ရေကူးတပ်မဟာ ( $ in ) တွင်ရနိုင်သောအချက်အလက်ပိတ်ပင်တားဆီးမှု (ပုံး) မရှိပါ။ အကြောင်းပြချက်များစွာရှိနိုင်သည်။
ဒေတာစီးဆင်းမှုကိုကူးစက်သောအခါ filter ကိုဖုန်းခေါ်ဆဲဖြစ်သော်လည်းဤအချိန်တွင် ဒေါ်လာတွင်ဒေါ်လာ မရရှိနိုင် ပါ ။
Troubleshooting နည်းလမ်း:
if (($bucket = stream_bucket_make_writeable($in)) === false) {
// ဒါကြောင့်စီး၏အဆုံးရှိမရှိစစ်ဆေးပါ
error_log("ရေးစရာဘာမှမရှိဘူး bucket,ဒီတစ်ခါလည်းစမ်းချောင်းအဆုံးသတ်ခဲ့သည်");
}
အကယ် . သင်၏ filter သည်အမှန်တကယ် output ကို (ဒေတာအရေးအသားမပါဘဲဖိုင်တစ်ခုအနေဖြင့်) စီးဆင်းမှုမရှိဘဲစီးဆင်းမှုကိုအသုံးပြုပါက,
စမ်းသပ်ချေ code:
stream_filter_register('example.filter', ExampleFilter::class);
$fp = fopen('php://temp', 'w+');
stream_filter_append($fp, 'example.filter', STREAM_FILTER_WRITE);
fclose($fp); // အဘယ်သူမျှမဒေတာကိုရေးသားခဲ့သည်
သင်၏ filter ကိုမှန်ကန်စွာ "ရေး" (သို့) "Read" စီးလမ်းကြောင်းသို့မှန်ကန်စွာလျှောက်ထားကြောင်းသေချာပါစေ။ မှားယွင်းသောတိမ်းညွတ်မှုသည် filter ကိုမှန်ကန်စွာလက်ခံရန်ပျက်ကွက်စေလိမ့်မည်။
ဥပမာ -
// မှန်ကန်သောအရေးအသား ဦး တည်ချက်
stream_filter_append($fp, 'example.filter', STREAM_FILTER_WRITE);
အကယ်. သင် ဦး တည်ချက်ကိုမသေချာပါက $ forfarams Debug Stream ၏အပြုအမူကိုပုံနှိပ်ရန်အကြံပြုသည်။
Custom filter class တွင်အပြောင်းအလဲကိုမလျော်ကန်စွာရေးသားပါက $ ကို မှန်ကန်စွာ ပြုပြင်မွမ်းမံခြင်းမပြုရပါက,
အခြေခံ filter ကိုမူဘောင်များသည်အောက်ပါနှင့်ဆင်တူသင့်သည်။
class ExampleFilter extends php_user_filter {
public function filter($in, $out, &$consumed, $closing) {
while ($bucket = stream_bucket_make_writeable($in)) {
// ပြုပြင်မွမ်းမံခြင်းသို့မဟုတ်မှတ်တမ်းတင်ခြင်း
$bucket->data = strtoupper($bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
The Bucket ကို ကွင်းဆက်တွင်မှန်ကန်စွာကိုင်တွယ်ရန်သေချာပါစေနှင့်အဓိပ္ပာယ်မရှိသောအစောပိုင်းပြန်လာခြင်းကိုရှောင်ပါ။
$ in အတွက်ရှိမရှိကိုအတည်ပြုပါ ။ ဖွဲ့စည်းပုံကိုပုံနှိပ်ရန် Var_Dump ($ In) ကို သုံးပါ။
Stream သည်အချက်အလက်များကိုရေးထားခြင်းရှိမရှိစစ်ဆေးပါ ။
Filter of Filter ၏ $ ပိတ်သိမ်းမှု အခြေအနေကို Debug : Filter သည် Shutdown Phase စဉ်အတွင်းဟုခေါ်ခံရခြင်းအတွက်ပုံမှန်ဖြစ်သည်။
logging အပြုအမူကိုသုံးပါ ။ error_log () ကို log to bucket status ရေးရန်အသုံးပြုနိုင်သည်။
PHP ဗားရှင်းနှင့်လိုက်ဖက်ညီမှု - PHP ၏ဗားရှင်းဟောင်းများသည် stream_filter တွင် bug များရှိသည်။ Gitbox.net တွင်ပိုမိုမြင့်မားသောဗားရှင်းကို အသုံးပြု. မျိုးပွားမှုကိုစမ်းသပ်ရန်အကြံပြုသည်။
Stream_bucket_make_wake_writible () မှားယွင်းစွာပြန်ပို့ခြင်း, လက်တွေ့ကျသောအပလီကေးရှင်းများ၌ကျွန်ုပ်တို့သည်၎င်း၏ semantics ကိုမှန်ကန်စွာနားလည်ခြင်း,
ဤဆောင်းပါးတွင်ဖော်ပြထားသောနည်းလမ်းများမှတစ်ဆင့်သင်သည် မှားယွင်းသော ပြန်လာရန်အကြောင်းပြချက်ကိုပိုမိုရှင်းလင်းစွာထားရှိပြီးသင်၏ stream filter filter under understation empletication ကိုပြင်ပေးသင့်သည်။