လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အဘယ်ကြောင့် stream_bucket_make_wriitable retrip အတုအယောင်အဘယ်ကြောင့် chrowsiet?

အဘယ်ကြောင့် stream_bucket_make_wriitable retrip အတုအယောင်အဘယ်ကြောင့် chrowsiet?

gitbox 2025-05-29

PHP ၏ stream_bucket_make_make_make_make_make_make_make_make_) function ကိုအသုံးပြုသောအခါအချို့သော developer အချို့ကသူတို့ပြန် မှားယွင်းသော အခြေအနေကိုကြုံတွေ့ရလိမ့်မည်။ ဤဆောင်းပါးသည်အဘယ်ကြောင့်ဤလုပ်ဆောင်မှုသည် မှားယွင်းသော ပြန်လာပြီးပြ problems နာများကိုဖြေရှင်းရန်ဘုံနည်းလမ်းများကိုပေးရန်ဤဆောင်းပါးသည်အသေးစိတ်လေ့လာလိမ့်မည်။

1 ။ stream_bucket_make_writable ကိုနားလည်ပါ။

Stream_bucket_make_Mwitable () PHP stream filter system တွင်အခြေခံလုပ်ဆောင်ချက်ဖြစ်သည်။ stream filter ကိုစိတ်ကြိုက်ပြုပြင်သည့်အခါ၎င်းကိုစမ်းချောင်းတစ်ခုသို့အချက်အလက်များကိုစမ်းရေဖြင့်ရေးလေ့ရှိသည်။ ၎င်း၏အခြေခံလုပ်ဆောင်ချက်များမှာ -

၎င်းကိုပြုပြင်မွမ်းမံနိုင်ရန်နှင့်စမ်းချောင်းသို့ပြန်ပို့နိုင်ရန်အတွက် 0 င်လာသော ရေပုံး များမှရေးသားနိုင်သည့်ပုံးတစ်လုံးကိုပြန်လည်ရယူရန်ကြိုးစားပါ။

အောက်ပါအတိုင်းလုပ်ဆောင်ချက်ကိုအောက်ပါအတိုင်းခေါ်ဆိုသည် -

 $bucket = stream_bucket_make_writeable($in);

$ INCION သည် Bucket တပ်မဟာတစ်ခုဖြစ်သည့်လက်ရှိတွင် Passed filter ၏အချက်အလက်တန်းစီကိုကိုယ်စားပြုသည်။

အောင်မြင်ပါက function သည် ပုံး အရာဝတ်ထုကိုပြန်ပို့သည်။ မအောင်မြင်ပါက မှားသည်

2 ။ အဘယ်ကြောင့် မှားယွင်းသော ပြန်လာသနည်း

ဤလုပ်ဆောင်မှုသည်ဤလုပ်ဆောင်ချက်အရ မှားယွင်းသောအ ယူမှားသည်များသောအားဖြင့်လက်ရှိတွင်ရေကူးတပ်မဟာ ( $ in ) တွင်ရနိုင်သောအချက်အလက်ပိတ်ပင်တားဆီးမှု (ပုံး) မရှိပါ။ အကြောင်းပြချက်များစွာရှိနိုင်သည်။

1 ။ အဆိုပါ upstream စီးကြောင်းဂီယာအဆုံးသတ်ထားသည်

ဒေတာစီးဆင်းမှုကိုကူးစက်သောအခါ filter ကိုဖုန်းခေါ်ဆဲဖြစ်သော်လည်းဤအချိန်တွင် ဒေါ်လာတွင်ဒေါ်လာ မရရှိနိုင် ပါ

Troubleshooting နည်းလမ်း:

 if (($bucket = stream_bucket_make_writeable($in)) === false) {
    // ဒါကြောင့်စီး၏အဆုံးရှိမရှိစစ်ဆေးပါ
    error_log("ရေးစရာဘာမှမရှိဘူး bucket,ဒီတစ်ခါလည်းစမ်းချောင်းအဆုံးသတ်ခဲ့သည်");
}

2 ။ အထက်သို့ output (အချည်းနှီးသောစီး)

အကယ် . သင်၏ 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); // အဘယ်သူမျှမဒေတာကိုရေးသားခဲ့သည်

3 ။ filter ကိုမှားယွင်းစွာအသုံးပြုသည်

သင်၏ filter ကိုမှန်ကန်စွာ "ရေး" (သို့) "Read" စီးလမ်းကြောင်းသို့မှန်ကန်စွာလျှောက်ထားကြောင်းသေချာပါစေ။ မှားယွင်းသောတိမ်းညွတ်မှုသည် filter ကိုမှန်ကန်စွာလက်ခံရန်ပျက်ကွက်စေလိမ့်မည်။

ဥပမာ -

 // မှန်ကန်သောအရေးအသား ဦး တည်ချက်
stream_filter_append($fp, 'example.filter', STREAM_FILTER_WRITE);

အကယ်. သင် ဦး တည်ချက်ကိုမသေချာပါက $ forfarams Debug Stream ၏အပြုအမူကိုပုံနှိပ်ရန်အကြံပြုသည်။

4 ။ အသုံးပြုသူ filter အကောင်အထည်ဖော်မှုအတွက်ယုတ္တိအမှားများ

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 ကို ကွင်းဆက်တွင်မှန်ကန်စွာကိုင်တွယ်ရန်သေချာပါစေနှင့်အဓိပ္ပာယ်မရှိသောအစောပိုင်းပြန်လာခြင်းကိုရှောင်ပါ။

3 ။ စုံစမ်းစစ်ဆေးမှုဆိုင်ရာနည်းလမ်းများအကျဉ်းချုပ်

  1. $ in အတွက်ရှိမရှိကိုအတည်ပြုပါ ။ ဖွဲ့စည်းပုံကိုပုံနှိပ်ရန် Var_Dump ($ In) ကို သုံးပါ။

  2. Stream သည်အချက်အလက်များကိုရေးထားခြင်းရှိမရှိစစ်ဆေးပါ

  3. Filter of Filter ၏ $ ပိတ်သိမ်းမှု အခြေအနေကို Debug : Filter သည် Shutdown Phase စဉ်အတွင်းဟုခေါ်ခံရခြင်းအတွက်ပုံမှန်ဖြစ်သည်။

  4. logging အပြုအမူကိုသုံးပါerror_log () ကို log to bucket status ရေးရန်အသုံးပြုနိုင်သည်။

  5. PHP ဗားရှင်းနှင့်လိုက်ဖက်ညီမှု - PHP ၏ဗားရှင်းဟောင်းများသည် stream_filter တွင် bug များရှိသည်။ Gitbox.net တွင်ပိုမိုမြင့်မားသောဗားရှင်းကို အသုံးပြု. မျိုးပွားမှုကိုစမ်းသပ်ရန်အကြံပြုသည်။

4 ။ နိဂုံးချုပ်

Stream_bucket_make_wake_writible () မှားယွင်းစွာပြန်ပို့ခြင်း, လက်တွေ့ကျသောအပလီကေးရှင်းများ၌ကျွန်ုပ်တို့သည်၎င်း၏ semantics ကိုမှန်ကန်စွာနားလည်ခြင်း,

ဤဆောင်းပါးတွင်ဖော်ပြထားသောနည်းလမ်းများမှတစ်ဆင့်သင်သည် မှားယွင်းသော ပြန်လာရန်အကြောင်းပြချက်ကိုပိုမိုရှင်းလင်းစွာထားရှိပြီးသင်၏ stream filter filter under understation empletication ကိုပြင်ပေးသင့်သည်။