လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> curl_multi_exec နှင့် curl_multi_info_read နှင့် တွဲဖက်. အပြိုင်တောင်းဆိုမှုများကိုမည်သို့ဖြည့်စွက်ရမည်နည်း။

curl_multi_exec နှင့် curl_multi_info_read နှင့် တွဲဖက်. အပြိုင်တောင်းဆိုမှုများကိုမည်သို့ဖြည့်စွက်ရမည်နည်း။

gitbox 2025-06-06

PHP, curl_multi_exec နှင့် curl_multi_info_read နှင့် curl_multi_info_read သည်တစ်ချိန်တည်းတွင် HTTP တောင်းဆိုမှုများကိုစတင်ရန်နှင့်ဤတောင်းဆိုမှုများကိုအပြိုင်ဖြင့်ထိရောက်စွာကွပ်မျက်ရန်လိုလျှင်အလွန်လက်တွေ့ကျလုပ်ဆောင်မှုများဖြစ်သည်။ ဤဆောင်းပါးသည်ထိရောက်သောအပြိုင်တောင်းဆိုမှုများကိုရရှိရန်အတွက်ဤလုပ်ဆောင်မှုနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြပြီးသတ်သတ်မှတ်မှတ်ကုဒ်များကိုဥပမာပေးသည်။


curl_multi_exec နှင့် curl_multi_info_read ကဘာလဲ။

  • curl_mamulti_exec : ခုတ်ပြတ်လပ်မှုကိုအကောင်အထည်ဖော်ရန်ဆံပင်ကောက်ကောက်အမျိုးမျိုးကို execute လုပ်ရန်အသုံးပြုသည်။ ၎င်းသည်အပြိုင်တွင်တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်သည်။

  • curl_multi_info_read : ပြီးစီးခဲ့သောတောင်းဆိုမှုများနှင့်ပတ်သက်သောသတင်းအချက်အလက်များကိုရယူရန်နှင့်တောင်းဆိုမှုပြီးဆုံးလာခြင်းရှိမရှိကိုရှာဖွေတွေ့ရှိနိုင်သည်။


အပြိုင်တောင်းဆိုမှုများအတွက်အခြေခံအတွေးအခေါ်များ

  1. မျိုးစုံဆံပင်ကောက်ကောက်တောင်းဆိုမှုများကိုအစ (curl fandles) ကိုစတင်ပါ။

  2. Multiplexed လက်ကိုင်တစ်ခုဖန်တီးပါ။

  3. တစ် ဦး ချင်းစီတောင်းဆိုမှုများအားလုံးကို Multiplexed လက်ကိုင်သို့ထည့်ပါ။

  4. တောင်းဆိုမှုများအားလုံးကိုစတင်လုပ်ဆောင်ရန် Curl_Multi_exec ကို ခေါ်ပါ။

  5. curl_multi_info_read မှတဆင့်တောင်းဆိုမှုတစ်ခုပြီးစီးခြင်းရှိမရှိကိုစဉ်ဆက်မပြတ်စစ်ဆေးပါ။

  6. ပြီးစီးတောင်းဆိုမှု၏ရလဒ်ဖြစ်စဉ်ကို။

  7. အရင်းအမြစ်များကိုသန့်ရှင်းရေး။


အသေးစိတ်အဆင့်များနှင့်နမူနာကုဒ်

 <?php
// တောင်းဆိုရန်URLစာရင်း
$urls = [
    'http://gitbox.net/api/endpoint1',
    'http://gitbox.net/api/endpoint2',
    'http://gitbox.net/api/endpoint3',
];

// ဖြစ်ပေါ်လာခြင်း multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];

// 1. တစ်ခုတည်းဖန်တီးပါcurlလက်ကိုင်,နှင့်ပူးပေါင်းပါmultiလက်ကိုင်
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // တိုက်ရိုက် output ကိုအစားပြန်လာရလဒ်များ
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// 2. တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ
$running = null;
do {
    // တောင်းဆိုမှုကို execute
    curl_multi_exec($multiHandle, $running);

    // မလုပ်မနေရမဟုတ်သော:တက်ကြွစွာဆက်သွယ်မှုကိုစောင့်ဆိုင်း,တားဆီးCPUအလွန်မြင့်မားသောထေို
    curl_multi_select($multiHandle);

    // 3. ပြီးစီးခဲ့တောင်းဆိုမှုရှိမရှိစစ်ဆေးပါ
    while ($info = curl_multi_info_read($multiHandle)) {
        if ($info['msg'] === CURLMSG_DONE) {
            $handle = $info['handle'];

            // အကြောင်းအရာရယူပါ
            $content = curl_multi_getcontent($handle);

            // ပြန်လည်ပြုပြင်ခြင်းအကြောင်းအရာပြုပြင်ခြင်း,ဥပမာအားဖြင့်ပုံနှိပ်ခြင်းသို့မဟုတ်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်
            echo "အပြည့်အဝတောင်းဆိုမှု,အကြောင်းအရာအရှည်:" . strlen($content) . "\n";

            // 移除完成的လက်ကိုင်,အရင်းအမြစ်များကိုအခမဲ့
            curl_multi_remove_handle($multiHandle, $handle);
            curl_close($handle);
        }
    }
} while ($running > 0);

// 4. ရုပ်သိမ်းခြင်းmultiလက်ကိုင်
curl_multi_close($multiHandle);
?>

ကုဒ်ဖော်ပြချက်

  • curl_multi_init () - Multiplexed လက်ကိုင်ကိုစတင်ပါ။

  • curl_mamulti_add_handle () - တစ် ဦး ချင်းစီကိုတောင်းဆိုထားသောကောက်ကောက်ကိုကိုင်ထားမှု Multi Multi Multi Matchi Multipi Matchi သို့ထည့်သည်။

  • curl_multi_exec () : တောင်းဆိုမှုများအားလုံးကိုလုပ်ဆောင်ပါ။

  • curl_multi_select () - CPU ၏ပျင်းရိခြင်းကိုရှောင်ရှားရန်တက်ကြွစွာဆက်သွယ်မှုကိုစောင့်ပါ။

  • curl_multi_info_read () - ပြီးစီးခြင်းတောင်းဆိုမှု၏သက်ဆိုင်ရာသတင်းအချက်အလက်များကိုဖတ်ပြီးတောင်းဆိုမှုပြီးဆုံးခြင်းရှိမရှိဆုံးဖြတ်သည်။

  • curl_multi_remove_handle () နှင့် curl_close ()) နှင့် curl_close () - မှတ်ဥာဏ်ယိုစိမ့်မှုများကိုရှောင်ရှားရန်အရင်းအမြစ်များကိုသန့်ရှင်းရေးလုပ်ပါ။

  • တောင်းဆိုမှုများအားလုံးပြီးဆုံးသည်အထိကွင်းဆက် ( $ အပြေးသည် 0 ဖြစ်လာသည်) ။


မှတ်သားရန်အရာ

  • အလွန်အကျွံဆာဗာဖိအား (သို့) system ြပည်မြစ်ပိတ်ဆို့မှုများကိုရှောင်ရှားရန်အပြိုင်တောင်းဆိုမှုများအရေအတွက်သည်ကြီးမားလွန်းခြင်းမပြုသင့်ပါ။

  • Curl_multi_Select () ပရိုဂရမ်ကို CPU အသုံးပြုမှုမှကာကွယ်ရန်စောင့်ဆိုင်းရန် () ကိုကြည့်ပါ။

  • ပြန်လာသောအကြောင်းအရာကိုပြန်လည်ပြုပြင်သည့်အခါတောင်းဆိုမှုကိုအောင်မြင်ရန်သေချာစေရန်အမှားစစ်ဆေးခြင်းကိုဂရုပြုပါ။

  • သင် post, header နှင့် authentication စသည့်ရှုပ်ထွေးသောတောင်းဆိုမှုများကိုစတင်ရန်လိုအပ်ပါကသင်တစ် ဦး တည်းဆံပင်ကောက်ကောက်လက်ကိုင်ကိုအစပြုသည့်အခါသက်ဆိုင်ရာရွေးချယ်စရာများကိုသတ်မှတ်နိုင်သည်။