PHP တွင်တောင်းဆိုမှုများအတွက်ကောက်ကောက်ကိုအသုံးပြုသောအခါ curl_multi_ * လုပ်ဆောင်ချက်များသည်အထူးသဖြင့်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများတွင် program ၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။ သို့သော် developer များစွာသည်ဤလုပ်ဆောင်မှုများကိုအသုံးပြုသောအခါအထူးသဖြင့် curl_multi_close ၏အသုံးပြုမှုကိုအသုံးပြုသောအခါ developer များစွာသည်သော့ချက်အမှားကိုင်တွယ်မှုပြ issues နာများကိုလျစ်လျူရှုလေ့ရှိသည်။ curl_multi_close ကို မှားယွင်းစွာခေါ်ဆိုပါက၎င်းသည်သယံဇာတယိုစိမ့်မှု, စွမ်းဆောင်ရည်ပြ problems နာများနှင့်မှတ်ဉာဏ်ပြည့်လျှံပြ problems နာများပင်ဖြစ်စေနိုင်သည်။
ဤဆောင်းပါးသည်အရင်းအမြစ်ယိုစိမ့်မှုနှင့်အခြားအလားအလာရှိသောပြ problems နာများကိုရှောင်ရှားရန်အမှားအယွင်းများကိုကိုင်တွယ်သောအခါ curl_multi_cloces function ကိုမည်သို့မှန်ကန်စွာအသုံးပြုရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။
curl_multi_close function သည် php curl extension တစ်ခု၏ function တစ်ခုဖြစ်သည့် php curl extension တစ်ခုဖြစ်သည့် fatch တစ်ခုဖြစ်သော Session တစ်ခုတွင်အစပြုထားသည့်လက်ကိုင်များအားလုံးကိုပိတ်ထားသည်။ curl_multi_ * function သည် curl other တောင်းဆိုမှုများကိုအပြိုင်ဖြင့်ကွပ်မျက်ရန်ခွင့်ပြုသည် ။
တစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုအကောင်အထည်ဖော်သည့်အခါ curl_multi_init ကို သုံးရန် လိုအပ်သည်။ တောင်းဆိုမှုပြီးဆုံးသွားသောအခါ curl_multi_Close ကို ပေါင်းသင်းပေါင်းများစွာကိုပိတ်ရန်ခေါ်ရန်ခေါ်ရမည်။
Code Perfection:
// ဘယ်လောက်စတင်cURLရုံးထိုင်အချိန်ကာလ
$mh = curl_multi_init();
$ch1 = curl_init();
$ch2 = curl_init();
// တည်ဆောက်သည်cURLရွေးချယ်စရာများ
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// 添加ရုံးထိုင်အချိန်ကာလ到多重ရုံးထိုင်အချိန်ကာလ资源中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// မျိုးစုံတောင်းဆိုမှုများလုပ်ဆောင်ပါ
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
// ဖြည့်စွက်ရန်တောင်းဆိုမှုကိုစောင့်ပါ
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// RETARD အချက်အလက်များကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ရုပ်သိမ်းခြင်းcURLရုံးထိုင်အချိန်ကာလ
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// 最后ရုပ်သိမ်းခြင်း多重cURLရုံးထိုင်အချိန်ကာလ
curl_multi_close($mh);
ချို့ယွင်းချက်ကိုင်တွယ်မှုမျိုးစုံတောင်းဆိုမှုများ၏အရေးပါသောအစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ တောင်းဆိုမှုများကိုအကောင်အထည်ဖော်သည့်အခါ connection timeout, မမှန်ကန်သောတုံ့ပြန်မှု, ဆာဗာအမှားများစသည်တို့အပါအ 0 င်အမှားအယွင်းများကိုရှောင်ရှားရန်အမှားအယွင်းများမထုတ်ပြန်နိုင်သည့်အခါအရင်းအမြစ်များကိုရှောင်ရှားရန်အတွက်အမှားအယွင်းများကိုရှောင်ရှားနိုင်ရန်အတွက် ဖမ်းမိခြင်းကို ရှောင်ကြဉ်နိုင်ရန်အတွက်အရင်းအမြစ်ကိုစနစ်တကျပိတ်ထားခြင်း,
အမှားကိုင်တွယ်ပုံဥပမာ -
try {
// ဘယ်လောက်စတင်cURLရုံးထိုင်အချိန်ကာလ
$mh = curl_multi_init();
$ch1 = curl_init();
$ch2 = curl_init();
// တည်ဆောက်သည်cURLရွေးချယ်စရာများ
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// 添加ရုံးထိုင်အချိန်ကာလ到多重ရုံးထိုင်အချိန်ကာလ资源中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// မျိုးစုံတောင်းဆိုမှုများလုပ်ဆောင်ပါ
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
// ဖြည့်စွက်ရန်တောင်းဆိုမှုကိုစောင့်ပါ
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// တစ်ခုချင်းစီတောင်းဆိုမှု၏ရလဒ်များကိုစစ်ဆေးပါ
if ($status != CURLM_OK) {
throw new Exception("cURLတောင်းဆိုမှုပျက်ကွက်,အမှားကုဒ်:" . $status);
}
// RETARD အချက်အလက်များကိုရယူပါ
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// ဒီမှာပြန်လာသောဒေတာဖြစ်စဉ်ကို...
} catch (Exception $e) {
// အမှားအယွင်းကိုင်တွယ်:မှတ်တမ်းအမှားမှတ်တမ်း
error_log("တောင်းဆိုမှုပျက်ကွက်:" . $e->getMessage());
} finally {
// အမှားအယွင်းများရှိကြောင်းသေချာပါစေ,အရင်းအမြစ်များကိုမှန်ကန်စွာထုတ်ပြန်လိမ့်မည်
if (isset($mh)) {
// ရုပ်သိမ်းခြင်းရုံးထိုင်အချိန်ကာလ资源
if (isset($ch1)) {
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);
}
if (isset($ch2)) {
curl_multi_remove_handle($mh, $ch2);
curl_close($ch2);
}
curl_multi_close($mh);
}
}
Curl_multi_Close ကို တောင်းဆိုမှုပြီးဆုံးပြီးနောက်မခေါ်ပါက PHP Session သည် System အရင်းအမြစ်များကိုသိမ်းပိုက်လိမ့်မည်။ တောင်းဆိုမှုများစွာတွင်တောင်းဆိုမှုများအရ, ထို့ကြောင့် curl_multi_close ကို မှန်ကန်စွာအသုံးပြုရန်အလွန်အရေးကြီးသည်။
များသောအားဖြင့်အရင်းအမြစ်ယိုစိမ့်မှုများသည်များသောအားဖြင့်အောက်ပါအခြေအနေများတွင်ရှိသည်။
curl_multi_clocess function ကိုခေါ်ရန်မေ့နေသည်။
အမှားတစ်ခုဖြစ်ပေါ်သောအခါပရိုဂရမ်သည်အရင်းအမြစ်ကိုထုတ်လွှတ်ရန် နောက်ဆုံးတွင်နောက်ဆုံးတွင် ပိတ်ဆို့ခြင်းမအောင်မြင်ပါ။
ကွင်းဆက်သို့မဟုတ်ထပ်ခါတလဲလဲတောင်းဆိုချက်တစ်ခုတွင်အသစ်တစ်ခုကိုအကြိမ်ကြိမ်ဖန်တီးထားသော်လည်းအဟောင်းကိုမပိတ်ထားပါ။
ဤပြ problems နာများကိုရှောင်ရှားရန်အကောင်းဆုံးအလေ့အကျင့်မှာအမှားအယွင်းများရှိလျှင်ပင်အစည်းအဝေးများအားလုံးကိုစနစ်တကျပိတ်ထားနိုင်ရန်အတွက် ကြိုးစားခြင်းဖြင့်နောက်ဆုံးအဆုံးကို အမြဲတမ်းသုံးရန်ဖြစ်သည်။
curl_multi_close ကိုသင့်တော်စွာအသုံးပြုခြင်းသည်အရင်းအမြစ်ယိုစိမ့်မှုနှင့်အခြားစွမ်းဆောင်ရည်ဆိုင်ရာပြ issues နာများကိုရှောင်ရှားရန်ခက်ခဲသောခြေလှမ်းတစ်ခုဖြစ်သည်။ တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများတွင်ကျွန်ုပ်တို့သည်အမှားကိုင်တွယ်မှုနှင့်အရင်းအမြစ်စီမံခန့်ခွဲမှုများကိုအမြဲတမ်းအာရုံစိုက်သင့်သည်။ Try-catch-starte မှတစ်ဆင့်တောင်းဆိုမှုတစ်ခုချင်းစီ၏တောင်းဆိုမှုတစ်ခုစီတိုင်းအရင်းအမြစ်များကိုမှန်ကန်သောဖြန့်ချိစေရန်သေချာစွာ 0 က်ဘ 0 ပတ် 0 န်းကျင်တွင်တည်ငြိမ်မှုကိုသေချာစေသည်။
အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်, ကျရှုံးမှုသို့မဟုတ်အခြားအမှားများအတွက်အရင်းအမြစ်များကိုပိတ်ပစ်ခြင်းကိုရှောင်ရှားရန်ညွှန်ကြားချက်တစ်ခုချင်းစီကိုကျွန်ုပ်တို့အမြဲသတိထားသင့်သည်။ ကျွန်ုပ်တို့၏ဆံပင်ကောက်ကောက်တောင်းဆိုမှုများသည်ပိုမိုထိရောက်စွာတည်ငြိမ်နိုင်ပြီးဖြစ်နိုင်ချေရှိသောမှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်စွမ်းဆောင်ရည်မြှင့်တင်ခြင်းများကိုရှောင်ရှားနိုင်သည်။