လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP PHP subprocesses တွင် curl_share ကိုတစ်ပြိုင်တည်းချိန်ကိုက်ခြင်း၏အကောင်အထည်ဖော်မှုစိတ်ကူး

PHP PHP subprocesses တွင် curl_share ကိုတစ်ပြိုင်တည်းချိန်ကိုက်ခြင်း၏အကောင်အထည်ဖော်မှုစိတ်ကူး

M66 2025-05-21

PHP တွင်ထိရောက်သောကွန်ယက်တောင်းဆိုမှုများကိုပြုလုပ်သောအခါ HTTP တောင်းဆိုမှုများကိုစတင်ရန် Curl ကိုအသုံးပြုရန်လိုအပ်သည်။ သို့သော်အချို့သောအရင်းအမြစ်များ (ဥပမာ cookies များ, ဖိုင်ဖော်ပြရန်စသည်တို့ကဲ့သို့ဖိုင်များကဲ့သို့သောအရင်းအမြစ်များ) ကိုကောက်ကောက်များအကြားဝေမျှရန်လိုအပ်သည့်အခါရိုးရာဆံပင်ကောက်ကောက်တောင်းဆိုမှုများသည်သယံဇာတများပြိုင်ပွဲနှင့်ထပ်တူပြုခြင်းနှင့်ထပ်တူပြုခြင်းကိစ္စများကြုံတွေ့ရနိုင်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် PHP သည် curl_share_init function ကိုထောက်ပံ့ပေးသည်။ PHP subprocesses မျိုးစုံတွင်မျှဝေထားသောအရင်းအမြစ်ထပ်တူပြုခြင်းကိုအောင်မြင်ရန် Curl_share_init ကို အသုံးပြုရန်ဤဆောင်းပါးသည်နက်ရှိုင်းစွာလေ့လာပါမည်။

1 ။ curl_share_init ဆိုတာဘာလဲ။

curl_share_init သည် PHP တွင် function function function ကိုမျှဝေထားသောဆံပင်ကောက်ကောက်ကိုဖန်တီးရန်ဖြစ်သည်။ အရင်းအမြစ်များကိုမျှဝေရန် curl တောင်းဆိုမှုများကိုကူညီနိုင်သည်။ မျှဝေထားသောအရင်းအမြစ်များသည် cookies များ, descriptors များ, dns cacts များစသည်တို့သည်မျှဝေထားသောအရင်းအမြစ်များကိုအသုံးပြုခြင်းသည်မျှဝေထားသောအရင်းအမြစ်များကိုအသုံးပြုခြင်းအားဖြင့်တူညီသောသတင်းအချက်အလက်များကိုထပ်ခါတလဲလဲတင်ပြခြင်းမှတောင်းဆိုခြင်းကိုတားဆီးနိုင်သည်။

2 ။ ဆံပင်ကောက်ကောက်အရင်းအမြစ်၏အခန်းကဏ်။

ကောက်ကောက်မျှဝေခြင်းအရင်းအမြစ်များသည်တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းကအလွန်အသုံးဝင်သည်။ ဥပမာအားဖြင့်, curl တောင်းဆိုမှုများစွာသည်တူညီသော 0 က်ဘ်ဆိုက်တစ်ခုသို့ 0 င်ရောက်ရန်လိုအပ်ပါက၎င်းတို့သည် cookies များကိုမျှဝေခြင်းဖြင့်တောင်းဆိုမှုများကိုတုန့်ပြန်ခြင်း, ထို့အပြင် Shared DNS Cache ကိုအသုံးပြုခြင်းသည် DNS မေးမြန်းချက်များကိုမကြာခဏလျှော့ချပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။

3 ။ Curl_share_init ကိုဘယ်လိုသုံးရမလဲ။

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

  1. curl_share_init ကိုသုံးပါ။

  2. တိကျသောအရင်းအမြစ်များကိုမျှဝေရန်မျှဝေထားသောလက်ကိုင်တစ်ခုအား (ကွတ်ကီးများ, DNS, ဖိုင်များ descriptors စသည်တို့) ကိုမျှဝေရန်ပြင်ဆင်ပါ။ ) ။

  3. မျိုးစုံဆံပင်ကောက်ကောက်တောင်းဆိုမှုများနှင့်အတူ shared လက်ကိုင်တွဲဖက်။

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

  5. နောက်ဆုံးတွင်မျှဝေထားသောလက်ကိုင်နှင့်ဆံပင်ကောက်ကောက်ကိုထုတ်လွှတ်ပါ။

နမူနာကုဒ်:

 <?php

// အဆိုပါ shared လက်ကိုင်ကိုအစပျိုး
$share = curl_share_init();

// မျှဝေထားသောအရင်းအမြစ်များကို configure(ဥပမာအားဖြင့် cookies)
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

// မျိုးစုံဖန်တီးပါ cURL လက်ကိုင်
$curl1 = curl_init('http://m66.net/api/endpoint1');
$curl2 = curl_init('http://m66.net/api/endpoint2');

// 将共享လက်ကိုင်与 cURL လက်ကိုင်关联
curl_setopt($curl1, CURLOPT_SHARE, $share);
curl_setopt($curl2, CURLOPT_SHARE, $share);

// အခြား set up cURL ရွေးချယ်စရာများ
curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);

// တောင်းဆိုမှုကို execute
$response1 = curl_exec($curl1);
$response2 = curl_exec($curl2);

// ရလဒ်ရလဒ်
echo "Response 1: " . $response1 . "\n";
echo "Response 2: " . $response2 . "\n";

// အရင်းအမြစ်များကိုအခမဲ့
curl_share_close($share);
curl_close($curl1);
curl_close($curl2);

?>

အထက်ပါကုဒ်တွင် Curl_Share_init $ မျှဝေ ထားသောလက်ကိုင်တစ်ခုဖန်တီးပြီး curl_share_setopt ကို cookies အချက်အလက်များကိုမျှဝေရန် curl_share_settop ကိုသုံးပါ။ ထို့နောက်ကျွန်ုပ်တို့သည် $ curl1 နှင့် $ curl2 ကို curl 4 နှင့် curl2 ကို ဖန်တီး. CurloPt_Share option မှတဆင့်မျှဝေထားသောလက်ကိုင်များကိုသူတို့နှင့်တွဲဖက်ချိတ်ဆက်ထားသည်။ တောင်းဆိုမှုကိုကွပ်မျက်ပြီးနောက်ကျနော်တို့ဆံပင်ကောက်ကောက်လက်ကိုင်နှင့် shared လက်ကိုင်ကိုပိတ်လိုက်တယ်။

4 ။ curl_share_init ကိုကလေးဖြစ်စဉ်ကိုအသုံးပြုပါ

အထူးသဖြင့် PHP ၏ PCNTL_Fork ကို ကလေးဖြစ်စဉ်များစွာကိုဖန်တီးရန် PHP ၏ PCNTL_Fork ကိုအသုံးပြုသောအခါကျွန်ုပ်တို့သည်အရင်းအမြစ်များကိုမျှဝေရန် Curl_share_init ကို သုံးနိုင်သည်။ ကလေးဖြစ်စဉ်တစ်ခုချင်းစီသည်တူညီသောအရင်းအမြစ်ကိုမျှဝေနိုင်သည်။

နမူနာကုဒ် ( PCNTL_Fork ကို သုံး. ):

 <?php

// အဆိုပါ shared လက်ကိုင်ကိုအစပျိုး
$share = curl_share_init();
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

// ဖန်တီး cURL လက်ကိုင်
$curl1 = curl_init('http://m66.net/api/endpoint1');
$curl2 = curl_init('http://m66.net/api/endpoint2');

// 将共享လက်ကိုင်与 cURL လက်ကိုင်关联
curl_setopt($curl1, CURLOPT_SHARE, $share);
curl_setopt($curl2, CURLOPT_SHARE, $share);

// ဖန်တီးလက်အောက်ခံ
$pid = pcntl_fork();

if ($pid == -1) {
    // အမှားကိုင်တွယ်
    die("Fork failed!");
} elseif ($pid == 0) {
    // လက်အောက်ခံ 1
    curl_setopt($curl1, CURLOPT_RETURNTRANSFER, true);
    $response1 = curl_exec($curl1);
    echo "Child Process 1 Response: " . $response1 . "\n";
    curl_close($curl1);
} else {
    // အဓိကလုပ်ငန်းစဉ်
    curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true);
    $response2 = curl_exec($curl2);
    echo "Parent Process Response: " . $response2 . "\n";
    curl_close($curl2);

    // 等待လက်အောက်ခံ结束
    pcntl_wait($status);
}

// Shared အရင်းအမြစ်များကိုအခမဲ့
curl_share_close($share);

?>

ဤဥပမာတွင်ကျွန်ုပ်တို့သည်ပထမ ဦး ဆုံးမျှဝေထားသောအရင်းအမြစ်လက်ကိုင်ကိုပထမ ဦး ဆုံး ဖန်တီး . မျှဝေထားသော cookies များကိုသတ်မှတ်ထားသည်။ ထို့နောက်ကျွန်ုပ်တို့သည် PCNTL_FORK ကို အသုံးပြု. ကလေးဖြစ်စဉ်ကိုဖန်တီးခဲ့သည်။ ကလေးဖြစ်စဉ်တွင်ကျွန်ုပ်တို့သည်အဓိကလုပ်ဆောင်မှုကိုအခြားတောင်းဆိုမှုတစ်ခုအနေဖြင့်အခြားတောင်းဆိုမှုတစ်ခုကွပ်မျက်ခံရချိန်တွင်တစ် ဦး ဆံပင်ကောက်ကောက်ကိုသီးခြားစီကွပ်ကဲသည်။ မျှဝေထားသောအရင်းအမြစ်များမှတစ်ဆင့်အဓိကဖြစ်စဉ်နှင့်ကလေးဖြစ်စဉ်သည်မိတ္တူပွားများတင်ခြင်းကိုရှောင်ရှားနိုင်သည်။

5 ။ မှတ်စုဖို့အရာ

  • Multi-process ပတ် 0 န်းကျင်တွင်လုပ်ငန်းစဉ်တစ်ခုစီသည်မိဘလုပ်ငန်းစဉ်၏ဖိုင်ဖော်ပြချက်ကိုကူးယူပြီးလုပ်ငန်းစဉ်တစ်ခုစီကိုလွတ်လပ်စွာလည်ပတ်ပြီးမျှဝေထားသောအရင်းအမြစ်များကိုတစ်ပြိုင်တည်းအောင်နိုင်ရန်အရင်းအမြစ်များကိုကူးယူရန်အရင်းအမြစ်များကိုမျှဝေမည်။

  • Curl_Share_init ကိုအသုံးပြုပြီးသည့်အခါအရင်းအမြစ်ကိုအခမဲ့အခမဲ့ခွင့်ပြုပြီးနောက် curlare_init ကိုပိတ်ထားပါ။

  • Threads ကို PHP တွင်တိုက်ရိုက်ပံ့ပိုးမှုမရှိပါ။ အကြီးစားတစ်ပြိုင်နက်တည်းနှင့်ဆက်ဆံရာတွင် PCNTL_SHAKE_INIT ကို ပေါင်းစပ်ခြင်းနှင့် curl_share_init များကို ပေါင်းစပ်ရန်စဉ်းစားနိုင်သည်။

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

curl_share_init ကို အသုံးပြုခြင်းအားဖြင့်ကျွန်ုပ်တို့သည် PHP ကလေးဖြစ်စဉ်များတွင်မျှဝေထားသောအရင်းအမြစ်များကိုတစ်ပြိုင်တည်းချိန်ကိုက်နိုင်သည်။ ၎င်းသည်ကွန်ယက်တောင်းဆိုမှုစွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်နှင့်မိတ္တူပွားများတင်ခြင်းကိုလျှော့ချရန်အလွန်အထောက်အကူပြုသည်။ အထူးသဖြင့်မြင့်မားသောတစ်ပြိုင်နက်တည်းပတ်ဝန်းကျင်ရှိသဘာဝပတ်ဝန်းကျင်တွင်မျှဝေထားသောအရင်းအမြစ်များကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည်မလိုအပ်သော overhead ကိုထိထိရောက်ရောက်လျှော့ချနိုင်ပြီးစနစ်ထိရောက်မှုကိုတိုးတက်စေနိုင်သည်။ အရင်းအမြစ်များကိုမျှဝေရန် PCNTL_FORK နှင့် Curl ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ရှုပ်ထွေးသောတစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများနှင့်သယံဇာတမျှဝေခြင်းပြ problems နာများကိုပိုမိုကောင်းမွန်သောဖြေရှင်းနိုင်သည်။