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

curl_multi_close ပြီးနောက် connection status status status ကို မှလွဲ. မည်သို့ရှောင်ရှားရမည်နည်း

gitbox 2025-05-12

curl_multi_ * စီးရီးလုပ်ဆောင်ချက်များသည်တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများအတွက် PHP ၏ curl extension ကိုအသုံးပြုသောအခါအလွန်အရေးကြီးသောကိရိယာများဖြစ်သည်။ curl_multi_close သည် လက်ကိုင်ပေါင်းများစွာကို ပိတ်ရန်အတွက်တာဝန်ရှိသည်။ သို့သော်မသင့်လျော်စွာအသုံးပြုပါကပုံမှန်မဟုတ်သောဆက်သွယ်မှုအခြေအနေကိုအလွယ်တကူဖြစ်ပေါ်နိုင်သည်။ ဒါဆိုဒီခြွင်းချက်တွေကိုလျောက်ပတ်စွာနဲ့မှန်ကန်စွာဘယ်လိုရှောင်ရှားနိုင်မလဲ။ ဤဆောင်းပါးသည်အသေးစိတ်ရှင်းပြပါလိမ့်မည်။

အသုံးများသောအမှားများ

Developeriers များကတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကိုပြုလုပ်သောအခါ code သည်ဤပုံနှင့်တူနိုင်သည်။

 <?php
$mh = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('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);

// စတင်နှင့် execute
do {
    $status = curl_multi_exec($mh, $active);
    curl_multi_select($mh);
} while ($active && $status == CURLM_OK);

// တိုက်ရိုက်ပိတ်ပါ
curl_multi_close($mh);

ဤစာအရေးအသားနည်းလမ်းပါ 0 င်သည့်ပြ problem နာမှာတောင်းဆိုမှုကိုအပြည့်အဝမလုပ်ဆောင်နိုင်သည့်တိုင် (အထူးသဖြင့်ကွန်ယက်အခြေအနေများညံ့ဖျင်းသောအခါ) curl_multi_close ကိုတိုက်ရိုက်ဟုခေါ်သည်။

လုပ်ဖို့မှန်ကန်သောနည်းလမ်း

curl_multi_close ကို မခေါ်မီ, လက်ကိုင် ( ဆံပင်ကြိုး ) လက်ကိုင်များအားလုံးကိုလုပ်ဆောင်နိုင်အောင်သေချာအောင်လုပ်သင့်သည်။ မှန်ကန်သောဖြစ်စဉ်ကိုဖြစ်သင့်သည်:

  1. curl_multi_exec ကို တောင်းဆိုမှုများအားလုံးပြီးဆုံးသည်အထိထပ်ခါတလဲလဲဟုခေါ်သည်။

  2. တစ်ခုချင်းစီကိုတစ် ဦး ချင်းစီဆံပင်ကောက်ကောက်လက်ကိုင် ( curl_maulti_remove_handle ) ကိုဖယ်ရှားပေးသည်။

  3. သီးခြားဆံပင်ကောက်ကောက်လက်ကိုင် ( curl_close ) ကိုသီးခြားစီပိတ်ပါ။

  4. နောက်ဆုံးတွင် Multi Multi Multi Multi ( Curl_maulti_close ) ပိတ်ပါ။

ပြုပြင်ထားသောကုဒ်ဥပမာမှာအောက်ပါအတိုင်းဖြစ်သည် -

 <?php
$mh = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('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);

// စတင်နှင့် execute
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

// တစ်ခုတည်းဖယ်ရှားခြင်းနှင့်ပိတ်ပါ handle
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);

curl_multi_remove_handle($mh, $ch2);
curl_close($ch2);

// နောက်ဆုံးအနီးကပ် multi handle
curl_multi_close($mh);

အသေးစိတ်ကိုအာရုံစိုက်ပါ

  • curl_multi_remove_handle ကို curl_multi_close မတိုင်မီပြုလုပ် ရမည်

  • ဆက်သွယ်မှုကိုတောင်းဆိုရန်ပျက်ကွက်လျှင်ပင်၎င်းကို Remove_Handle + အနီးကပ် မှတဆင့်မှန်ကန်စွာသန့်ရှင်းရေးလုပ်ရမည်။

  • curl_multi_Multi_Select ကိုကွင်းဆက်တစ်ခုတွင် CPU အသုံးပြုမှုကိုလျှော့ချပြီးအလုပ်များစောင့်ဆိုင်းခြင်းမှရှောင်ရှားနိုင်သည်။

  • အမှားများကို (ဥပမာ Curl_errno နှင့် curl_error ) ကိုဖမ်းရန်ကြိုးစားပါ။

အကျဉ်းချုပ်

မြင့်မားသောတစ်ပြိုင်နက်တည်းဖြစ်ရပ်များတွင်အသေးစိတ်အချက်အလက်များကိုအောင်မြင်မှုသို့မဟုတ်ရှုံးနိမ့်မှုဆုံးဖြတ်ရန်။ curl_multi_close ၏အနှစ်သာရသည်လက်ကိုင်ပေါင်းများစွာကိုဖျက်ဆီးရန်သာဖြစ်သည်။ ထို့ကြောင့် Multi Multi Multi ကိုမပိတ်မီ, တစ် ဦး ချင်းစီလက်ကိုင်တစ်ခုချင်းစီကိုလက်ကိုင်တစ်ခုချင်းစီကိုဖယ်ရှားပြီးပိတ်ပါ။

မှန်ကန်သောအပြောင်းအလဲနဲ့လုပ်ထုံးလုပ်နည်းပြီးနောက်သင့်တစ်ပြိုင်တည်းတောင်းဆိုမှုများကိုခေါင်းကိုက်နေသည့်လျှို့ဝှက် bug များနှင့်ဝေးလံခေါင်သီသည်။