PHP ၏ curl extension ကိုအသုံးပြုသောအခါ curl_mamulti_ * လုပ်ဆောင်ချက်များသည် http တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်သည်။ curl_multi_exec () မှတဆင့်အသုတ်များရှိတောင်းဆိုမှုများကိုပေးပို့ပါ။ ထို့နောက် curl_multi_close () ကို သုံး. လက်ကိုင်ကိုပိတ်ပါ။ ဤလုပ်ငန်းဆောင်တာများသည်အစွမ်းထက်သော်လည်း curl_setop () နှင့် တွဲဖက်. အသုံးပြုသောအခါသူတို့သည်အချို့သောထောင်ချောက်များကိုကျရောက်နေပြီဖြစ်သည်။ အောက်တွင်ဖော်ပြထားသောဘုံအမှားများကိုကျွန်ုပ်တို့ဆွေးနွေးပါမည်။
curl_multi_exec () ကို သုတ်ခြင်းလုပ်ငန်းစဉ်မျိုးစုံကိုအသုတ်ဖြစ်စဉ်များကိုအသုံးပြုသောအခါ, တောင်းဆိုမှုတစ်ခုစီအတွက်ရွေးချယ်စရာများကိုသတ်မှတ်ရန်လိုအပ်သည်။ လက်ကိုင်မျိုးစုံထည့်သွင်းသောအခါ curl_setop () ကို မှန်ကန်စွာမသတ်မှတ်ပါကတောင်းဆိုမှုသည်မမှန်ကန်ပါ။
$ch1 = curl_init();
$ch2 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'https://gitbox.net/api/data1');
curl_setopt($ch2, CURLOPT_URL, 'https://gitbox.net/api/data2');
// အခြားလိုအပ်သောရွေးချယ်စရာများကိုသတ်မှတ်ရန်မေ့နေသည်,ကဲ့သို့ CURLOPT_RETURNTRANSFER
တစ်ခုချင်းစီ ကိုကောက်ကောက် လက်ကိုင်များအတွက်လိုအပ်သောရွေးချယ်စရာများကိုသတ်မှတ်ရန်သေချာပါစေ။ ဥပမာအားဖြင့်:
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_mamulti_close () နှင့် curl_close () နှစ် ဦး စလုံးသည်ဆံပင်ကောက်ကောက်ကိုပိတ်ထားရန်အသုံးပြုသည်။ သို့သော်သူတို့၏လုပ်ဆောင်မှုအတိုင်းအတာသည်ကွဲပြားသည်။ curl_close () curl_mamulti_close () သည် curlti_close () ကလက်ကိုင်များအားလုံးကိုပိတ်ထားနေစဉ် curl_close တစ်ခုတည်းကိုသာပိတ်ထားသည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုအသုံးပြုခြင်းသည်မမှန်မကန်ကိုမှန်ကန်စွာဖြန့်ချိခြင်းမပြုရန်သို့မဟုတ်အစီအစဉ်သည်နောက်ဆက်တွဲတောင်းဆိုမှုများတွင်ချွင်းချက်ရှိလိမ့်မည်။
curl_multi_close($multiHandle); // အမှား,အကေြာင်းမှာ $multiHandle မျိုးစုံလက်ကိုင်များကိုပိတ်ရန်လိုအပ်သည်
တောင်းဆိုမှုများစွာကိုအသုံးပြုသောအခါသင်လက်ကိုင်တစ်ခုချင်းစီတောင်းခံမှုနှင့်ပြုပြင်ခြင်းပြီးပါကလက်ကိုင်မျိုးစုံကိုပိတ်ရန် curl_multi_close () ကို သုံးရမည်။
// မျိုးစုံတောင်းဆိုမှုများလုပ်ဆောင်ပါ
curl_multi_exec($multiHandle, $running);
// တစ် ဦး ချင်းစီကိုပိတ်ပါ cURL လက်ကိုင်
curl_close($ch1);
curl_close($ch2);
// မှန်ကန်စွာအသုံးပြုပါ curl_multi_close()
curl_multi_close($multiHandle);
တစ်ခါတစ်ရံတွင် developer တစ် ဦး သည်တောင်းဆိုမှုများကိုပေးပို့ရန် curl_multi_exec () ကို အသုံးပြုသောအခါ curlfulti_exec () ကိုအသုံးပြုသောအခါသူတို့သည်တောင်းဆိုမှုကိုမှန်ကန်စွာဖြည့်စွက်ရန်မစောင့်နေရသောကြောင့်သူတို့က connection ကိုသေချာစွာပိတ်နိုင်သည်။ curl_multi_exec () ကို ပြတ်တောင်းဖြန့်ချိမှုကတည်းကကတည်းကကတည်းကကတည်းကကွပ်မျက်ခံရပြီးကတည်းကတောင်းဆိုမှုများအားလုံးကိုပြီးစီးပြီး curl_mamulti_close လို့ခေါ်တယ်။
// 没有等待请求完成就关闭လက်ကိုင်
curl_multi_close($multiHandle);
$ အပြေး Parameter သည်ရှာဖွေတွေ့ရှိခြင်းအားဖြင့်ဆက်သွယ်မှုကိုမပိတ်မီတောင်းဆိုမှုများအားလုံးကိုပြီးစီးကြောင်းသေချာအောင်လုပ်ပါ။
$running = null;
do {
curl_multi_exec($multiHandle, $running);
} while ($running > 0);
curl_multi_close($multiHandle);
အချို့ဖြစ်ရပ်များတွင် developer များသည်တူညီသောဆံပင်ကောက်ကောက်ကိုအသုံးပြုရန်ကြိုးစားနိုင်သည်။ ၎င်းသည်အမှားအယွင်းများသို့မဟုတ်စွမ်းဆောင်ရည်ဆိုင်ရာပြ issues နာများကိုအလွယ်တကူဖြစ်စေနိုင်သည်။ တောင်းဆိုမှုအသစ်တစ်ခုကိုပေးပို့သည့်အခါတိုင်း curl လက်ကိုင်အသစ်ကိုဖန်တီးသင့်ပြီးမတူညီသောရွေးချယ်စရာများကိုသတ်မှတ်သင့်သည်။
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/data1');
// 复用相同的လက်ကိုင်
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/data2'); // အမှား,应该创建新的လက်ကိုင်
တောင်းဆိုမှုတစ်ခုစီအတွက်ဆံပင်ကောက်ကောက်လက်ကိုင်တစ်ခုဖန်တီးရန်သေချာပါစေ။
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'https://gitbox.net/api/data1');
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, 'https://gitbox.net/api/data2');
curl_multi_exec () သည် တောင်းဆိုမှုကိုလုပ်ဆောင်သောအခါကွန်ယက်သို့မဟုတ်ဆာဗာအမှားအယွင်းများဖြစ်ပေါ်လာနိုင်သည်။ ဤအမှားအယွင်းများကိုမှန်ကန်စွာကိုင်တွယ်နိုင်ရန်အတွက်မှန်ကန်စွာကိုင်တွယ်နိုင်ရန်အတွက် curl_error () နှင့် curl_errno () ကို debugging လုပ်ရန်အသုံးပြုသင့်သည်။
curl_multi_exec($multiHandle, $running); // တောင်းဆိုမှုကို execute,但没有处理အမှား
တစ်ခုချင်းစီကိုတောင်းဆိုမှုပြီးစီးပြီးနောက်အမှားမက်ဆေ့ခ်ျကိုစစ်ဆေးပြီးထုတ်ပေးပါ:
// တောင်းဆိုမှုကို execute
curl_multi_exec($multiHandle, $running);
// အမှား处理
foreach ($handles as $ch) {
if ($errno = curl_errno($ch)) {
echo "cURL error: " . curl_error($ch);
}
}