လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_setopt ကိုအသုံးပြုသောအခါ curl_multi_close အမှားအယွင်းများ

curl_setopt ကိုအသုံးပြုသောအခါ curl_multi_close အမှားအယွင်းများ

gitbox 2025-05-29

PHP ၏ curl extension ကိုအသုံးပြုသောအခါ curl_mamulti_ * လုပ်ဆောင်ချက်များသည် http တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်သည်။ curl_multi_exec () မှတဆင့်အသုတ်များရှိတောင်းဆိုမှုများကိုပေးပို့ပါ။ ထို့နောက် curl_multi_close () ကို သုံး. လက်ကိုင်ကိုပိတ်ပါ။ ဤလုပ်ငန်းဆောင်တာများသည်အစွမ်းထက်သော်လည်း curl_setop () နှင့် တွဲဖက်. အသုံးပြုသောအခါသူတို့သည်အချို့သောထောင်ချောက်များကိုကျရောက်နေပြီဖြစ်သည်။ အောက်တွင်ဖော်ပြထားသောဘုံအမှားများကိုကျွန်ုပ်တို့ဆွေးနွေးပါမည်။

1 ။ ကွင်းဆက်အတွက်လိုအပ်သော options ကိုသတ်မှတ်ရန်မေ့လျော့

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);

2 ။ curl_multi_close () နှင့် curl_close () နှင့် curl_close ()

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);

3 ။ ဖြည့်စွက်ရန်တောင်းဆိုမှုများကိုစောင့်ဆိုင်းခြင်းမရှိဘဲဆက်သွယ်မှုကိုပိတ်ပါ

တစ်ခါတစ်ရံတွင် 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);

4 ။ မမှန်ကန်ပါ

အချို့ဖြစ်ရပ်များတွင် 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');

5 ။ အမှားကိုင်တွယ်ခြင်းနှင့် debugging

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);
    }
}