လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်ကွင်းများ၌ curl_close ကိုမှန်ကန်စွာအသုံးပြုပါ

မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်ကွင်းများ၌ curl_close ကိုမှန်ကန်စွာအသုံးပြုပါ

gitbox 2025-05-28

ကောက်ကောက်သည်ဒေတာများကိုဆာဗာများနှင့်လဲလှယ်ရန်ကိရိယာတစ်ခုဖြစ်သည်။ HTTP, HTTPS, FTP စသည်များအပါအ 0 င် protocols အမျိုးမျိုးကိုထောက်ပံ့သည်။ PHP ရှိ curl extension ကိုထောက်ပံ့သည်။

http တောင်းဆိုမှုများစွာအောင်သောအခါ curl ၏အရင်းအမြစ်များမှာအကန့်အသတ်ရှိသည်။ ထို့ကြောင့်ဤအရင်းအမြစ်များကိုတောင်းဆိုမှုပြီးဆုံးပြီးနောက်အချိန်မီထုတ်ပြန်ရမည်။ ဤသည် curl_close () function ကိုခေါ်ဆိုခြင်းဖြင့်အောင်မြင်သည်။ အကယ်. HTTP တောင်းဆိုမှုများကိုချိတ်ဆက်မှုမရှိဘဲကွင်းဆက်တစ်ခုတွင်မကြာခဏစတင်ပါက၎င်းသည်မှတ်ဉာဏ်ယိုစိမ့်မှုနှင့်ဆာဗာ၏စွမ်းဆောင်ရည်ကိုပင်ဖြစ်စေလိမ့်မည်။

ဆံပင်ကောက်ကောက်၏အခြေခံအသုံးပြုမှု

ကောက်ကောက်တောင်းခံသည့်အခါ, အောက်ပါအဆင့်များကိုကျွန်ုပ်တို့အများအားဖြင့်လိုက်နာသည်။

  1. အဆိုပါဆံပင်ကောက်ကောက် session ကိုစတင်ပါ။

  2. တောင်းဆိုမှုကို parameters တွေကိုသတ်မှတ်ပါ။

  3. တောင်းဆိုမှုကို execute နှင့်တုံ့ပြန်မှုကိုရယူပါ။

  4. ဆံပင်ကောက်ကောက် session ကိုပိတ်ပါ။

 $ch = curl_init(); // ဖြစ်ပေါ်လာခြင်း cURL ရုံးထိုင်အချိန်ကာလ
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint"); // တောင်းဆိုမှုကို set up URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // တုန့်ပြန်အကြောင်းအရာကိုရယူပါ
$response = curl_exec($ch); // တောင်းဆိုမှုကို execute
curl_close($ch); // 关闭ရုံးထိုင်အချိန်ကာလ

loop အတွက်မှတ်ဉာဏ်ယိုစိမ့်ပြ problem နာ

တောင်းဆိုမှုများကို loop တစ်ခုတွင်မကြာခဏစတင်လေ့ရှိပါကတောင်းဆိုမှုတစ်ခုစီသည် connection information ကိုသိုလှောင်ရန်မှတ်ဉာဏ်ကိုခွဲဝေချထားပေးသည်။ ကွင်းဆက်တစ်ခုချင်းစီတွင်သင်ဆံပင်ကောက်ကောက်စာမပိတ်ပါကမှတ်ဉာဏ်ယိုစိမ့်မှုဖြစ်လိမ့်မည်။ ထိုသို့ပြုလုပ်ခြင်းသည် PHP scripts ကိုမှတ်ဉာဏ်များလွန်းစေနိုင်သည်, ၎င်းသည်နောက်ဆုံးတွင်စွမ်းဆောင်ရည်ပြ problems နာများနှင့်ဆာဗာတွင်ပင်ပျက်ကျလိမ့်မည်။

ဥပမာအားဖြင့်, curl session ကိုစနစ်တကျမပိတ်ဘဲကွင်းဆက်ရှိတောင်းဆိုမှုများကိုစုဆောင်းခြင်း,

 // အမှားသရုပ်ပြ:ကွင်းဆက်ထဲမှာမပိတ်ဘူး cURL ရုံးထိုင်အချိန်ကာလ
for ($i = 0; $i < 1000; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    // ခေါ်ဆိုရန်မေ့လျော့ curl_close()
}

မှန်ကန်သောဆံပင်ကောက်ကောက်အသုံးပြုမှု

မှတ်ဉာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက် curl_close () function ကိုခေါ်ယူရန်သေချာစေရန်လိုအပ်သည်။ အလွယ်ကူဆုံးနည်းလမ်းမှာ curl_close () အတွင်း၌တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက်အရင်းအမြစ်များကိုဖြည့်ဆည်းပေးနိုင်ရန်ကွင်းဆက်အတွင်း၌ထားရန်ဖြစ်သည်။

 // မှန်ကန်သောသရုပ်ပြ:ကွင်းဆက်အတွက်အနီးကပ် cURL ရုံးထိုင်အချိန်ကာလ
for ($i = 0; $i < 1000; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch); // 及时关闭ရုံးထိုင်အချိန်ကာလ
}

တောင်းဆိုမှုတစ်ခုစီပြီးဆုံးပြီးနောက် curl session ကိုပိတ်ခြင်းအားဖြင့် PHP Memory သည်ဖြုန်းတီးခြင်းမရှိတော့ပါ။ HTTP တောင်းဆိုမှုတစ်ခုစီအတွက်အရင်းအမြစ်များကိုအချိန်မီပြန်လွှတ်ပေးသည်။

Multithreaded curl သုံး. စွမ်းဆောင်ရည် bottleneck များကိုလျှော့ချပါ

တစ်ခုတည်းသောတောင်းဆိုမှုအမြောက်အများကိုကိုင်တွယ်ရာတွင် Single-Threaded Loops သည်အလွန်နှေးကွေးနိုင်သည်။ သင်တောင်းဆိုမှုများအမြောက်အများကိုကိုင်တွယ်ရန်လိုအပ်ပါက Execution ထိရောက်မှုကိုတိုးတက်စေရန်လိုအပ်ပါက (တစ်ပြိုင်နက်တည်း curl ဟုလည်းခေါ်ခြင်း) ကိုသင်စဉ်းစားနိုင်သည်။ ၎င်းသည်တောင်းဆိုမှုများ၏အချိန်ကိုအလွန်လျှော့ချနိုင်ပြီးမကြာခဏ i / o စစ်ဆင်ရေးကြောင့်ဖြစ်ရတဲ့ butcecks ကိုရှောင်ရှားနိုင်သည်။

 // Multi-Threading ကိုအသုံးပြုခြင်း cURL စွမ်းဆောင်ရည်ကိုပိုကောင်းအောင်လုပ်ဖို့
$mh = curl_multi_init(); // ဖြစ်ပေါ်လာခြင်း cURL 多线程ရုံးထိုင်အချိန်ကာလ
$handles = [];

for ($i = 0; $i < 1000; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/some-endpoint");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $ch); // တစ်ခုချင်းစီကိုထည့်ပါ cURL 句柄添加到多线程ရုံးထိုင်အချိန်ကာလ中
    $handles[] = $ch;
}

// Multi- ချည်တောင်းဆိုမှုများကိုလုပ်ဆောင်ပါ
$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($active > 0);

// အားလုံးပိတ်ပါ cURL ရုံးထိုင်အချိန်ကာလ
foreach ($handles as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh); // 关闭多线程ရုံးထိုင်အချိန်ကာလ

၎င်းသည်အဓိကအစီအစဉ်ကိုပိတ်ဆို့ခြင်းမရှိဘဲလုပ်ငန်းစဉ်တစ်ခု၏လုပ်ငန်းစဉ်များတွင်လုပ်ဆောင်ရန်တောင်းဆိုမှုများကိုပြုလုပ်ရန်ခွင့်ပြုသည်။

ဆက်စပ်အကြောင်းအရာ