PHP တွင် XML_set_Ennamonface_Decl_Handler သည် xml parser သို့ပြန်ခေါ်ရန်အသုံးပြုသည်။ ဤ function သည် XML_Parser_create သုံး. ဖန်တီးထားသောခွဲခြမ်းစိတ်ဖြာခြင်းကဲ့သို့သောဖြစ်ရပ်မှန်အခြေပြု XML parsing အတွက်အဓိကအားဖြင့်အသုံးပြုသည်။
သို့သော် (ဥပမာ - အဂတိလိုက်စားမှုများအပါအ 0 င်) တွင် PHP ၏ extension များ (NTS တိုးချဲ့ခြင်း) များတွင် PHP ၏ extension များ (NTS) သည်လုံခြုံစိတ်ချရသော (NTS) သည်တိုက်ရိုက်ဖြစ်စေ,
အကယ်. ရှိလျှင်,
Multiple Threads သည်တူညီသော XML_Parser အရင်းအမြစ်ကိုမျှဝေပါ။
သို့မဟုတ်အရာဝတ်ထု / ပိတ်ပစ်ကို callbacks အဖြစ်မျှဝေပါ။
သို့မဟုတ် Global variable များကိုရေးရန်စစ်ဆင်ရေးများကိုဝေမျှပါ။
ပေါ်လာလိမ့်မည်
callback function ကိုအခြားချည်ကမတော်တဆ overwritten;
အဆိုပါ parser ပြည်နယ်ကိုအပြိုင်တွင်ပြုပြင်မွမ်းမံသည်;
callback တွင်အသုံးပြုသောအရင်းအမြစ်များ (ဥပမာဒေတာဘေ့စ်ဆက်သွယ်မှုများ, ဖိုင်လက်ကိုင်များ) နှင့်ယှဉ်ပြိုင်ခြင်းတို့တွင်ပ conflicts ိပက်ခများနှင့်ယှဉ်ပြိုင်သည်။
xml_parser ကို ချည်တစ်လျှောက်တွင်မဝေငှပါနှင့်။ ချည်တစ်ခုချင်းစီအတွင်းသီးခြားခွဲခြမ်းစိတ်ဖြာပါ။
$parser = xml_parser_create();
// namespace အဆုံးသတ်ဘို့ callback ထားပါ
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) {
echo "namespace ၏အဆုံး:$prefix\n";
});
// ဒါဟာဝေးလံခေါင်ဖျားကနေပြန်လည်ရယူကြောင်းယူဆ XML အချက်များ
$xmlData = file_get_contents('https://gitbox.net/api/data.xml');
xml_parse($parser, $xmlData, true);
xml_parser_free($parser);
ဤနည်းအားဖြင့်တစ်ပြိုင်နက်တည်း run နေလျှင်ပင် XML_Parser အရင်းအမြစ်များသည်တစ် ဦး နှင့်တစ် ဦး လွတ်လပ်သောအရာများဖြစ်သည်။
အကယ်. callback function ကိုဒေတာများကိုမျှဝေရန်လိုအပ်ပါက, ချည်မျှင်ကိုသုံးရန်လိုပါက, ဥပမာအားဖြင့်:
$threadContext = [
'log' => []
];
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use (&$threadContext) {
$threadContext['log'][] = "အဆုံးသတ် namespace:$prefix";
});
Context မှ အ ရာဝတ်ထုကို သုံး. colliture သို့အတိအလင်း အသုံးပြုပါ ။
အကယ်. သင်သည်တူညီသောမှတ်တမ်းဖိုင်သို့စာဖြင့်ရေးသားခြင်းသို့မဟုတ်ဒေတာဘေ့စ်စားပွဲကိုမွမ်းမံခြင်းကဲ့သို့သောအရင်းအမြစ်အချို့ကိုသင်အမှန်တကယ်မျှဝေရန်လိုလျှင်,
$mutex = new \Threaded();
xml_set_end_namespace_decl_handler($parser, function($parser, $prefix) use ($mutex) {
$mutex->synchronized(function() use ($prefix) {
file_put_contents('/tmp/ns_log.txt', "namespace ၏အဆုံး:$prefix\n", FILE_APPEND);
});
});
မှတ်စု: တစ်ပြိုင်နက်တည်း fearturency Security ကို File Operations နှင့် Database အရောင်းအ 0 ယ်များအတွက်စဉ်းစားသင့်သည်။
PHP ၏အရင်းအမြစ်အမျိုးအစားများ (ဥပမာ - ခွဲခြမ်းစိတ်ဖြာခြင်း, ဖိုင်လက်ကိုင်များ, ဒေတာဘေ့စ်ဆက်သွယ်မှုများအရ) ကိုများသောအားဖြင့်ကွဲပြားခြားနားသောချည်များအကြားလုံခြုံစွာမသွားနိုင်ပါ။ သငျ သညျချည် သို့မဟုတ် မတည်ငြိမ်သော နှင့်အတူထုပ်ရင်တောင်လျှင်ပင် parser ကိုတစ် ဦး ချည်တစ်ချောင်းတွင်မသွားရန်မကြိုးစားပါနှင့်။
မှန်ကန်သောနည်းလမ်းမှာ - ချည်တစ်ခုချင်းစီကိုဖန်တီးပြီးလိုအပ်သည့်အရင်းအမြစ်များကိုဖန်တီးပြီးစီမံပါစေ။
xml_set_end_ennamonface_Decl_Handler ကို သုံး. အဓိကကျသည့်ပတ်ဝန်းကျင်တွင်ရှိသည်။
? ချည်တစ်ခုချင်းစီသည် parser ဥပမာအားဖြင့်သီးခြားစီဖန်တီးသည်
? ကမ္ဘာလုံးဆိုင်ရာသို့မဟုတ် Cross-Threaded အရင်းအမြစ်များကိုသုံးပြီး callbacks ကိုရှောင်ကြဉ်ပါ
? မျှဝေထားသောအရင်းအမြစ်များအတွက်ကာကွယ်မှုကိုသော့ခတ်ပါ
? parser သို့မဟုတ်သယံဇာတများကို threads ဖြတ်ပြီးဖြတ်သန်းမသွားပါနဲ့
၎င်းသည်ချည်မျှင်၏ရှောင်ရှားခြင်းကိုရှောင်ရှားနိုင်ပြီးသင်၏ Multi-Threaded PHP အစီအစဉ်သည်အားကောင်းနေသည်။
အကယ်. ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန်လိုအပ်သည်ဆိုပါက Memory နှင့်အရင်းအမြစ်များကိုအခြေခံအားဖြင့်သီးခြားနေသည့်လုံခြုံမှုဆိုင်ရာစိန်ခေါ်မှုများကိုအခြေခံကျကျမှအခြေခံကျကျမယ့ ် thread service စိန်ခေါ်မှုများကိုအခြေခံကျကျမှအခြေခံကျကျမှအခြေခံကျကျမှအခြေခံကျကျမှအခြေခံအားဖြင့်ခွဲခြားသတ်မှတ်ခြင်းနှင့်အခြေခံအားဖြင့်အခြေခံကျကျကွဲပြားခြားနားမှုကိုရှောင်ရှားနိုင်သည့်လုပ်ငန်းစဉ်အခြေပြုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်ခြင်းကိုအသုံးပြုရန်စဉ်းစားပါ။