PHP တွင် stream_filter_register သည်အလွန်အသုံးဝင်သောလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်အမှန်တကယ်အသုံးပြုမှုတွင် developer များစွာသည်ပြ a နာတစ်ခုနှင့်ကြုံတွေ့ရလိမ့်မည်။ stream_filter_register ကိုခေါ်ဆိုသောအခါစစ်ထုတ်ခြင်းအတန်းကိုအသိအမှတ်မပြုနိုင်ပါ။ ဤဆောင်းပါးသည်ပြ the နာကိုလျင်မြန်စွာရှာဖွေရန်နှင့်ဖြေရှင်းရန်အတွက်ဤပြ problem နာ၏အကြောင်းရင်းများနှင့်ပြ esh နာများကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
များသောအားဖြင့်ပြနာမှာ -
stream_filter_register('myfilter', 'MyFilterClass');
ကွပ်မျက်စဉ်အတွင်းအလားတူအမှားတစ်ခုဖြစ်ပွားခဲ့သည်:
Warning: stream_filter_register(): unable to register filter 'myfilter'
သို့မဟုတ်:
Fatal error: Class 'MyFilterClass' not found
ဤအချက်က PHP သည်သက်ဆိုင်ရာ filter class ကိုမတွေ့ရှိနိုင်ကြောင်းနှင့်မှတ်ပုံတင်ခြင်းကိုမဖြည့်ဆည်းနိုင်ကြောင်းဖော်ပြသည်။
PHP တွင် filter တစ်ခုကိုမှတ်ပုံတင်သည့်အခါစစ်ထုတ်သည့်အတန်းကို 0 န်ဆောင်မှုပေးရန်သေချာစေရန်လိုအပ်သည်။ အကယ်. အတန်းကို ဦး စွာမိတ်ဆက်မထားပါက PHP သည်အတန်းကိုရှာမတွေ့နိုင်ပါ။
ဖြေရှင်းချက် -
stream_filter_register ကို မခေါ်မီ filter class file ကိုမှန်ကန်စွာမိတ်ဆက်ပေးရန်သေချာပါစေ:
require_once 'MyFilterClass.php';
သို့မဟုတ်အလိုအလျောက်တင်ဆောင်ယန္တရားကိုသုံးပါ။
PHP တွင် filter class သည် php_user_filter အတန်းအစားကိုအမွေဆက်ခံရမည်။
ဥပမာ -
class MyFilterClass extends php_user_filter {
public function filter($in, $out, &$consumed, $closing) {
// Logic filtering
}
}
မှတ်ပုံတင်သည့်အချိန်တွင်အမည်ရှိအမည်ကိုအတန်းအမည်နှင့်အတူတူပင်ဖြစ်ရမည်။ အကယ်. Namespace ကိုအသုံးပြုပါကဥပမာအားဖြင့်နာမည်အပြည့်အစုံကိုဂရုပြုရန်လိုအပ်သည်။
namespace MyApp\Filters;
class MyFilterClass extends \php_user_filter {
// ပြီးမေြာက်စေ
}
ခေါ်တဲ့အခါ:
stream_filter_register('myfilter', 'MyApp\\Filters\\MyFilterClass');
ရှားပါးသောကိစ္စရပ်များတွင် PHP ဗားရှင်းသည်အလွန်နည်းပါးသော်လည်းအချို့သော configurations များသည်စီးဆင်းမှုစစ်ထုတ်မှုများကိုပိတ်ထားပါက Phpinfo () သည်ပံ့ပိုးမှုကိုအတည်ပြုရန် Phpinfo () ကို စစ်ဆေးနိုင်သည်။
stream_filter_register ကိုမခေါ်မီအတန်းရှိမဟုတ်သည်ကိုအတည်ပြုရန်အတန်းကိုတိုက်ရိုက်စစ်ဆေးရန်ကြိုးစားပါ။
if (class_exists('MyFilterClass')) {
echo "Class ကို loaded";
} else {
echo "အတန်းမတွေ့ရှိပါ";
}
Class သည် Php_user_Fileter ကို အမွေဆက်ခံပါ။
အောင်မြင်စွာမှတ်ပုံတင်ခြင်းကိုသေချာစေရန်အပြည့်အစုံဥပမာတစ်ခုဖြစ်သည်။
<?php
class MyFilterClass 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;
}
}
stream_filter_register('myfilter', 'MyFilterClass') or die('filter ကိုမှတ်ပုံတင်ရန်ပျက်ကွက်');
$fp = fopen('php://temp', 'r+');
fwrite($fp, "hello world");
rewind($fp);
stream_filter_append($fp, 'myfilter');
echo stream_get_contents($fp); // ထုတ်လုပ်ခြင်း:HELLO WORLD
အကယ်. သင်သည်တေးရေးဆရာသို့မဟုတ်ထုံးစံအတိုင်း autoloading ကိုအသုံးပြုပါက autooloading လမ်းကြောင်းမှန်ကန်ကြောင်းသေချာအောင်လုပ်ပါ။
PHP အမှားအစီရင်ခံစာကိုဖွင့်ပါ။
error_reporting(E_ALL);
ini_set('display_errors', 1);
တိကျသောအမှားအယွင်းများကိုကြည့်ခြင်းအားဖြင့်ပြ the နာကိုရှာနိုင်သည်။
ပ conflicts ိပက်ခများကိုရှောင်ရှားရန် Filter-like ကဲ့သို့သောဖိုင်များကိုသီးခြားစီခွဲထားသင့်သည်။
PHP ဗားရှင်းကိုမသိသော bug များကိုရှောင်ရှားရန် Test onthing envirements ်ဌာန်းတွင်ယနေ့အထိယနေ့အထိစောင့်ရှောက်ရန်ကြိုးစားပါ။
namespace ကိုသုံးသောအခါမှတ်ပုံတင်ထားသောအတန်းအစားအမည်မှာအတန်းအစားအမည်အပြည့်အစုံဖြစ်ရမည် (namespace အပါအဝင်) ဖြစ်သည်။
ရှုပ်ထွေးသောစီမံကိန်းများတွင်စာသင်ခန်းကိုတင်ရန်သေချာစေရန် filter class ဖိုင်ကို ဦး စွာမိတ်ဆက်ရန်အကြံပြုသည်။
အထက်ပါအဆင့်များဖြင့် stream_filter_register ၏ပြ farm နာအများစုသည် filter class များကိုစစ်ဆေးနိုင်သည်ကိုမဖြေရှင်းနိုင်ပါ။ အကယ်. ပြ the နာရှိနေဆဲဖြစ်ပါက, တိကျသောအမှားသတင်းအချက်အလက်များကိုသင်စစ်ဆေးပြီးကုဒ်နှင့်ပတ် 0 န်းကျင်ကိုတဖြည်းဖြည်းဖြေရှင်းနိုင်သည်။
အထက်ဖော်ပြပါအချက်သည် PHP တွင် PHP တွင် Stream_filter_register အတွက်ပြ ros နာဖြေရှင်းခြင်းနည်းလမ်းဖြစ်သည်။ ပြ the နာကိုမြန်မြန်ဆန်ဆန်ဖြေရှင်းနိုင်လိမ့်မယ်လို့မျှော်လင့်ပါတယ်။