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

curl_multi_close မတိုင်မီမှားယွင်းသောတောင်းဆိုမှုများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း

gitbox 2025-05-12

PHP ၏ curl_multi_ * စီးရီး * စီးရီးလုပ်ဆောင်ချက်များကိုအသုံးပြုသောအခါတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအတွက်လုပ်ဆောင်သည့်အခါမသင့်လျော်စွာကိုင်တွယ်လျှင်မသင့်လျော်စွာကိုင်တွယ်လျှင်မမှန်ကန်သောသို့မဟုတ်မမှန်ကန်သောတောင်းဆိုမှုများကို curlulti_close () ခေါ်ဆိုမှုများနှင့်ဆာဗာအမှားများကိုပင်ပေးပို့ရန်လွယ်ကူသည်။ တောင်းဆိုမှုများအားလုံးသည်လက်ကိုင်ကိုမပိတ်မီမှန်ကန်သောနှင့်မှန်ကန်သောမှန်ကန်ကြောင်းသေချာစေရန်အတွက်သင်ပိုမိုကောင်းမွန်အောင်လုပ်ဆောင်ရန်အောက်ပါရှုထောင့်များဖြင့်စတင်နိုင်သည်။

1 ။ တောင်းဆိုချက်တစ်ခုမထည့်သွင်းမီတစ် ဦး ချင်းစီကောက်ကောက်လက်ကိုင်တစ်ခုချင်းစီကိုစစ်ဆေးပါ

တစ် ဦး ချင်းစီ curl တောင်းဆိုမှုတစ်ခုချင်းစီ ( curl_init မှအစပြု) url ကိုမှန်ကန်စွာ format လုပ်ထားရန်လိုအပ်သောတောင်းဆိုမှု headers ကိုမှန်ကန်စွာတပ်ဆင်ထားရန်လိုအပ်သောတောင်းဆိုမှု headers များကမထည့်သွင်းမီ curl_multi_add_handle ကိုထည့်သွင်းခြင်းမပြုမီအပြည့်အဝစစ်ဆေးသင့်သည်။

နမူနာကုဒ်:

 function createCurlHandle(string $url): ?\CurlHandle
{
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return null;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // အချိန်ကုန်ထားပါ
    return $ch;
}

2 ။ Curl_multi_exec ၏ကွပ်မျက် status ကိုမှန်ကန်စွာစောင့်ကြည့်

ဆက်သွယ်မှုကိုအလျင်အမြန်ပိတ်ထားမည့်အစားလက်တွေ့ကျကျတုန့်ပြန်မှုအားလုံးကိုမှန်ကန်စွာတုန့်ပြန်ရန်သေချာစေရန်ကွပ်မျက်မှုအပြည့်အဝကွပ်မျက်မှုအဆင့်အတန်းကိုဖြတ်သန်းရန်လိုအပ်သည်။

ဥပမာ -

 $urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3"
];

$multiHandle = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = createCurlHandle($url);
    if ($ch !== null) {
        curl_multi_add_handle($multiHandle, $ch);
        $curlHandles[] = $ch;
    }
}

$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > CURLM_OK) {
        // မှတ်တမ်းတင်ခြင်းအမှားများ,သို့မဟုတ်လိုအပ်သလိုကြားဖြတ်
        break;
    }
    // ခွင့်ပြုCPUချိုးပါ
    curl_multi_select($multiHandle);
} while ($running > 0);

3 ။ လက်ကိုင်ကိုမပိတ်ခင်တစ်ခုချင်းစီကိုတောင်းဆိုမှုကိုတစ်ခုချင်းစီ၏ပြန်လာ status ကိုစစ်ဆေးပါ

Curl_Multi_Close () ကိုတရားဝင်မခေါ်မီ, တစ် ဦး ချင်းစီလက်ကိုင်အားလုံးကိုဖြတ်သန်းသင့်သည်, ၎င်းတို့၏ပြန်လာကုဒ် ( curlinfo_http_code ) နှင့်အခြားအချက်အလက်များကိုအတည်ပြုရန်နှင့်အခြားသတင်းအချက်အလက်များကိုအတည်ပြုရန်လိုအပ်,

 foreach ($curlHandles as $ch) {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($httpCode !== 200) {
        // ခြွင်းချက်ကိုင်တွယ်,ဥပမာအားဖြင့်, သစ်ထုတ်လုပ်ရေး、Re-Submit တောင်းဆိုမှုစသည်တို့ကိုစသည်တို့
        echo "တောင်းဆိုမှုပျက်ကွက်,HTTPအခြေအနေကုဒ်:" . $httpCode . PHP_EOL;
    }
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

curl_multi_close($multiHandle);

4 ။ အကျဉ်းချုပ်

တောင်းဆိုမှုမျိုးစုံကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်နေသည့်အခြေအနေတစ်ခုတွင်တောင်းဆိုမှုတစ်ခုစီကိုမှန်ကန်စွာစီမံရန်မှန်ကန်စွာစီမံရန်အလွန်အရေးကြီးသည်။ Parameterscers မှစတင်သော parameters တွေကိုတင်းကြပ်စွာအတည်ပြုခြင်းမှသည်အဆုံးမတိုင်မီအဆင့်အတန်းကိုစောင့်ကြည့်လေ့လာခြင်းနှင့်အဆုံးမတိုင်မီပြန်လည်ထူထောင်ရေးကိုစစ်ဆေးခြင်းသည်မှားယွင်းသောတောင်းဆိုမှုများကြောင့်ဖြစ်ရတဲ့အရင်းအမြစ်စွန့်ပစ်ပစ္စည်းနှင့် server-side ဖိအားကိုလျော့နည်းစေနိုင်သည်။ curl_multi_multi_selection ကို သုံး. curl_multi_multi_selection ကို အသုံးပြု. သင်၏ curl_multi ခေါ်ဆိုမှုများသည်စနစ်တကျစနစ်၏ယုံကြည်စိတ်ချရမှုကိုတိုးတက်စေပြီးတည်ငြိမ်ပြီးတည်ငြိမ်နိုင်သည်။