လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> xml_set_external_entity_entity_Ref_handler သည် XML ၏စွမ်းဆောင်ရည်ကိုကြီးမားသောဖိုင်များတွင်ပါ 0 င်သည်။

xml_set_external_entity_entity_Ref_handler သည် XML ၏စွမ်းဆောင်ရည်ကိုကြီးမားသောဖိုင်များတွင်ပါ 0 င်သည်။

M66 2025-07-10

Performance ပြ issues နာများသည်ကြီးမားသောဖိုင်များနှင့်သက်ဆိုင်သောဖိုင်များနှင့်သက်ဆိုင်သည့်အခါအထူးသဖြင့်ဖိုင်အိတ်များသည်ရှုပ်ထွေးသောသို့မဟုတ်ပြင်ပ entity ကိုးကားချက်များစွာရှိသည်။ XML_SEST_EXternal_ENTISTER_REF_HANDER သည် XML ရှိပြင်ပ Entity ကိုးကားချက်များအတွက် callback function များကိုကိုင်တွယ်ရန် PHP မှပေးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ဤလုပ်ဆောင်ချက်သည်ခွဲခြမ်းစိတ်ဖြာခြင်း၏တိကျမှန်ကန်မှုကိုထိခိုက်စေရုံသာမကခွဲခြမ်းစိတ်ဖြာခြင်း၏စွမ်းဆောင်ရည်အပေါ်အရေးပါသောသက်ရောက်မှုရှိနိုင်သည်။

1 ။ XML ရှိပြင်ပအဖွဲ့အစည်းများ၏အခန်းကဏ်။

XML ဖိုင်များတွင်ပြင်ပအဖွဲ့အစည်းများ (ပြင်ပအဖွဲ့အစည်းများ) ပါ 0 င်နိုင်သည်။ XML parser သည်ဤပြင်ပအဖွဲ့အစည်းများနှင့်တွေ့ဆုံသည့်အခါ၎င်းသည်သက်ဆိုင်ရာအချက်အလက်များကိုဖွင့်ရန်ကွန်ယက်တောင်းဆိုမှုများသို့မဟုတ်ဖိုင်တွဲများသို့မဟုတ်ဖိုင်အမျိုးအစားများလုပ်ဆောင်မှုများပြုလုပ်လေ့ရှိသည်။ XML ဖိုင်တစ်ခုတွင်ပြင်ပအဖွဲ့အစည်းများရှိပါကခွဲခြမ်းစိတ်ဖြာစဉ်အတွင်းဖိုင်တင်ခြင်းနှင့်ကွန်ယက်တောင်းဆိုမှုများသည်ခွဲခြမ်းစိတ်ဖြာမှုတစ်ခုလုံးကိုသိသိသာသာနှေးကွေးစေနိုင်သည်။

ဥပမာ -

 <span><span><span class="hljs-meta">&lt;?xml version=<span class="hljs-string">"1.0"</span></span></span><span> encoding=</span><span><span class="hljs-string">"UTF-8"</span></span><span>?&gt;
</span><span><span class="hljs-meta">&lt;!DOCTYPE <span class="hljs-keyword">note</span></span></span><span> </span><span><span class="hljs-keyword">SYSTEM</span></span><span> </span><span><span class="hljs-string">"note.dtd"</span></span><span>&gt;
</span><span><span class="hljs-tag">&lt;<span class="hljs-name">note</span></span></span><span>&gt;
  </span><span><span class="hljs-tag">&lt;<span class="hljs-name">to</span></span></span><span>&gt;Tove</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">to</span></span></span><span>&gt;
  </span><span><span class="hljs-tag">&lt;<span class="hljs-name">from</span></span></span><span>&gt;Jani</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">from</span></span></span><span>&gt;
  </span><span><span class="hljs-tag">&lt;<span class="hljs-name">heading</span></span></span><span>&gt;Reminder</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">heading</span></span></span><span>&gt;
  </span><span><span class="hljs-tag">&lt;<span class="hljs-name">body</span></span></span><span>&gt;Don't forget me this weekend!</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">body</span></span></span><span>&gt;
</span><span><span class="hljs-tag">&lt;/<span class="hljs-name">note</span></span></span><span>&gt;
</span></span>

ဤဥပမာတွင် Note.Dtd သည်ပြင်ပအဖွဲ့အစည်းတစ်ခုဖြစ်သည်။ XML ကိုခွဲခြမ်းစိတ်ဖြာသောအခါ parser သည်စွမ်းဆောင်ရည်ပြ issues နာများကိုဖြစ်ပေါ်စေနိုင်သော DTD ဖိုင်ကို load လုပ်ရန်လိုအပ်သည်။

2 ။ XML_SET_EXTIMATITY_ENTITY_REF_Handler ၏အခန်းကဏ် role

XML_set_External_Enternal_Entity_Ref_handler သည် PHP တွင် function တစ်ခုဖြစ်ပြီးပြင်ပအဖွဲ့အစည်းများခွဲခြမ်းစိတ်ဖြာသည့်အခါ XML parser အတွက် callback function ကိုပြုလုပ်သည်။ ဤလုပ်ဆောင်မှုသည် developer များ XML ဖိုင်များရှိပြင်ပအဖွဲ့အစည်းများကိုမည်သို့ကိုင်တွယ်ရမည်ကိုဥပမာအားဖြင့်ပြင်ပဖိုင်များသည် download လုပ်ထားသောသို့မဟုတ်အခြားအကြောင်းအရာများကိုတိုက်ရိုက်ပြန်ပို့ရန်လိုအပ်သည်ဖြစ်စေ,

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">my_external_entity_ref_handler</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$public</span></span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>) {
    </span><span><span class="hljs-comment">// ပြင်ပအဖွဲ့အစည်းများကိုင်တွယ်သောကုဒ်</span></span><span>
    </span><span><span class="hljs-comment">// ထုံးစံအကြောင်းအရာသို့မဟုတ်အရင်းအမြစ်များကိုပြန်ပို့သည်</span></span><span>
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"&lt;dummy&gt;Custom content&lt;/dummy&gt;"</span></span><span>;
}

</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"my_external_entity_ref_handler"</span></span><span>);
</span></span>

ဤဥပမာတွင် XML Parser သည်ပြင်ပအဖွဲ့အစည်းတစ်ခုနှင့်တွေ့ဆုံသည့်အခါပြင်ပအဖွဲ့အစည်းမှရည်ညွှန်းသည့်ဖိုင်သို့မဟုတ် URL ကိုရယူမည့်အစား my_external_entity_ref_handler callback function ကိုခေါ်ဆိုသည်။ ဤချဉ်းကပ်မှုသည်ခွဲခြမ်းစိတ်ဖြာမှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နှင့်မလိုအပ်သောကွန်ယက်တောင်းဆိုမှုများသို့မဟုတ် disk i / o စစ်ဆင်ရေးများကိုရှောင်ရှားရန်အသုံးပြုလေ့ရှိသည်။

iii ။ စွမ်းဆောင်ရည်အပေါ် xml_set_external_entity_Ef_handler ၏သက်ရောက်မှု

1 ။ မလိုအပ်သောပြင်ပတောင်းဆိုမှုများကိုရှောင်ကြဉ်ပါ

XML ဖိုင်တစ်ခုတွင်ပြင်ပအဖွဲ့အစည်းအမြောက်အများပါ 0 င်သည့်အခါပုံမှန်အပြုအမူသည်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်ဤ entity ဖိုင်များကိုဒေါင်းလုပ်လုပ်ရန်ကြိုးစားခြင်းဖြစ်သည်။ ၎င်းသည် I / O စစ်ဆင်ရေးများကိုတိုးမြှင့်ပေးရုံသာမက Network latency မှလည်းထိခိုက်နိုင်သည်။ ပြင်ပအဖွဲ့အစည်းဖိုင်သည်လက်လှမ်းမမီနိုင်ပါကခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ငန်းစဉ်သည်ကျရှုံးနိုင်သည်။ XML_set_external_entity_Ref_handler function ကိုအသုံးပြုခြင်းအားဖြင့်ဤမလိုအပ်သောပြင်ပတောင်းဆိုမှုများကိုရှောင်ရှားနိုင်ပြီးခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ငန်းစဉ်ကိုအရှိန်မြှင့်နိုင်သည်။

2 ။ ပြင်ပအဖွဲ့အစည်းများတင်သည်ကိုထိန်းချုပ်ပါ

XML အချက်အလက်အမြောက်အများကိုပြုပြင်သည့်အခါပြင်ပအဖွဲ့အစည်းများသည်ခွဲခြမ်းစိတ်ဖြာခြင်းလုပ်ငန်းစဉ်ကိုအလွန်နှေးကွေးစေနိုင်သည်။ xml_set_external_entity_ref_handler မှတဆင့်ဤပြင်ပအဖွဲ့အစည်းများသည် load account လုပ်ခြင်းရှိမရှိသို့မဟုတ်ငြိမ်သက်သောအကြောင်းအရာများကိုတိုက်ရိုက်ပြန်ပို့ခြင်းရှိမရှိကိုသင်ထိန်းချုပ်နိုင်သည်။

3 ။ Memory စားသုံးမှုကိုလျှော့ချပါ

XML parser သည်ပြင်ပအဖွဲ့အစည်းများတင်သောအခါထိုအဖွဲ့အစည်းများ၏အချက်အလက်များကိုမှတ်ဉာဏ်ထဲသို့ထည့်ရန်လိုအပ်သည်။ ပြင်ပ entity ဖိုင်များသည်အလွန်ကြီးမားပါက၎င်းသည်မှတ်ဥာဏ်အလွန်အကျွံသုံးစွဲမှုသည်အလွန်အကျွံသုံးစွဲမှုကိုဖြစ်ပေါ်စေပြီးစနစ်၏စွမ်းဆောင်ရည်ကိုအကျိုးသက်ရောက်နိုင်သည်။ ပြင်ပအဖွဲ့အစည်းများစိတ်ကြိုက်ပြုပြင်ခြင်းအားဖြင့်, အထူးသဖြင့်မှတ်ဉာဏ်သုံးစွဲမှုကိုထိထိရောက်ရောက်လျှော့ချနိုင်သည့်ကြီးမားသောဖိုင်များကိုပြုပြင်သည့်အခါအလွန်အကျွံမှတ်ဉာဏ်အသုံးပြုမှုကိုရှောင်ရှားနိုင်သည်။

4 ။ ။ XML_SESS_External_ENTATITITY_ENFAFIDER ကို အသုံးပြုနည်း။

1 ။ ပြင်ပ Entity parsing disable

XML ဖိုင်ရှိပြင်ပအဖွဲ့အစည်းသည်အရေးမကြီးပါက XML_set_external_entity_Ef_handler မှတဆင့်ပြင်ပ Entity parsing ကို disable လုပ်. XML ကိုယ်တိုင်၏ contents များကိုသာကိုင်တွယ်နိုင်သည်။ ဥပမာအားဖြင့်, parser မှနောက်ထပ်ကွန်ယက်တောင်းဆိုမှုများကိုရှောင်ရှားရန်အချည်းနှီးသောကြိုးသို့မဟုတ်ကြိုတင်သတ်မှတ်ထားသောအကြောင်းအရာကိုပြန်ပို့နိုင်သည်။

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">ignore_external_entity</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$public</span></span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">''</span></span><span>; </span><span><span class="hljs-comment">// တိုက်ရိုက်အကြောင်းအရာကိုတိုက်ရိုက်ပြန်သွားပါ,ပြင်ပအဖွဲ့အစည်းများ downloading လုပ်ခြင်းကိုရှောင်ပါ</span></span><span>
}

</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"ignore_external_entity"</span></span><span>);
</span></span>

2 ။ cached ပြင်ပအဖွဲ့အစည်းများကိုသုံးပါ

အကယ်. ပြင်ပအဖွဲ့အစည်းများသည်လက်လှမ်းမီရန်လိုအပ်ပါက၎င်းတို့ကိုသူတို့ဖြေရှင်းသည့်အခါတိုင်းကွန်ယက်တောင်းဆိုမှုများကိုရှောင်ရှားရန်ဤပြင်ပအဖွဲ့အစည်းများကိုရှာဖွေခြင်းကိုမည်သည့်နေရာတွင်ထည့်သွင်းစဉ်းစားပါ။ callback function ကိုအချိန်တိုင်းပြန်လည်ဒေါင်းလုပ်မလုပ်ဘဲဒေသတွင်းသိုလှောင်ထားသောအဖွဲ့အစည်းများကိုပြန်လည်ပေးပို့ရန်ခွင့်ပြုသည်။

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">cached_external_entity</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$public</span></span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>) {
    </span><span><span class="hljs-variable">$cached_data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">"/path/to/cached_entity.xml"</span></span><span>);
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$cached_data</span></span><span>;
}

</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"cached_external_entity"</span></span><span>);
</span></span>

3 ။ ပြင်ပ entity ပြန်လာတန်ဖိုးကိုစိတ်တိုင်းကျ

အချို့ဖြစ်ရပ်များတွင်ဒေတာဘေ့စ်သို့မဟုတ်အခြားဒေသဆိုင်ရာအရင်းအမြစ်များမှအချက်အလက်များရခြင်းကဲ့သို့သောစီးပွားရေးလိုအပ်ချက်များအပေါ် အခြေခံ. ပြင်ပအဖွဲ့အစည်းများသို့ပုံမှန်အားဖြင့်ပြင်ပအကြောင်းအရာများသို့ပြန်ပို့ရန်လိုအပ်နိုင်သည်။ xml_set_external_entity_ref_handler မှတဆင့်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်စေရန်အမှန်တကယ်အခြေအနေများအရတိကျသောဒေတာများကိုပြန်လည်ပေးပို့နိုင်သည်။

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">custom_external_entity</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$public</span></span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>) {
    </span><span><span class="hljs-comment">// entity ဒေတာများကိုဒေတာဘေ့စ်မှမေးမြန်းသည်ဟုယူဆပါ</span></span><span>
    </span><span><span class="hljs-variable">$db_data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">get_entity_from_db</span></span><span>(</span><span><span class="hljs-variable">$public</span></span><span>, </span><span><span class="hljs-variable">$system</span></span><span>);
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$db_data</span></span><span>;
}

</span><span><span class="hljs-variable">$parser</span></span><span> = </span><span><span class="hljs-title function_ invoke__">xml_parser_create</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">xml_set_external_entity_ref_handler</span></span><span>(</span><span><span class="hljs-variable">$parser</span></span><span>, </span><span><span class="hljs-string">"custom_external_entity"</span></span><span>);
</span></span>

V. နိဂုံးချုပ်

XML_set_external_entity_Efder_Ref_handler သည် XML ခွဲခြမ်းစိတ်ဖြာမှုကိုကိုင်တွယ်သည့်အခါတွင် XML ခွဲခြမ်းစိတ်ဖြာခြင်းကိုကိုင်တွယ်သောအခါ, ဤလုပ်ဆောင်မှုကိုအသုံးချခြင်းဖြင့် XML ဖိုင်များတွင်ပါ 0 င်ခြင်း, ဤချဉ်းကပ်မှုသည်အထူးသဖြင့်ပြင်ပအဖွဲ့အစည်းများပါ 0 င်သည့်ဖိုင်များပါ 0 င်သည့်အခါများသောအားဖြင့်ကြီးမားသော XML အချက်အလက်များကိုလုပ်ဆောင်သောအခါစွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။