PHP တွင်ဆံပင်ကောက်ကောက်သည်အခြားဆာဗာများနှင့်ဒေတာဖလှယ်မှုအတွက်အားကောင်းသောစာကြည့်တိုက်ဖြစ်သည်။ developer များကို http တောင်းဆိုမှုများမှတဆင့်အချက်အလက်များကိုပေးပို့ရန်နှင့်လက်ခံရန်ခွင့်ပြုသည်။ ဆံပင်ကောက်ကောက်တောင်းခံပြီးနောက် curl_close function ကိုအသုံးပြုလေ့ရှိပြီး curl_close function ကို အသုံးပြု. အရင်းအမြစ်များကိုအခမဲ့ထုတ်ပေးရန်အသုံးပြုသည်။
$ch = curl_init("https://gitbox.net/some-api-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
ဤဥပမာတွင် curl_close ($ ch) ပြီးနောက် ($ ch) ကိုခေါ်သည်။ အရင်းအမြစ်များကိုဖြန့်ချိမည့် $ ch variable ကိုသိမ်းပိုက်ရန်တောင်းဆိုသည်။
curl_close ကိုအသုံးပြုပြီးနောက်တွင်မှတ်ဉာဏ်ကိုမှတ်မိနေပါကအကြောင်းပြချက်၏ရှုထောင့်မျိုးစုံရှိနိုင်သည်။ ဤတွင်အချို့သောဘုံအကြောင်းပြချက်များ:
PHPM Memory Management Meriism
PHP သည်အမှိုက်များကိုစုဆောင်းရန်နှောင့်နှေးစေသောယန္တရားတစ်ခုကိုအသုံးပြုသည်။ curl_close ဟုခေါ်သော်ငြားဆိုလျှင်ပင်မှတ်ဉာဏ်ထုတ်ပြန်ခြင်းသည်ချက်ချင်းမဖြစ်နိုင်ပါ။ ဤအရင်းအမြစ်များကိုမသုံးမီ script execution သည်လွန်စွာကွပ်မျက်သည်အထိ PHP သည်စောင့်ဆိုင်းနေနိုင်သည်။
curl_init နှင့် curl_close မျိုးစုံအကြိမ်ကြိမ်
သင်က curl အရင်းအမြစ်များကိုတူညီသော script တွင်အကြိမ်ပေါင်းများစွာအစပိုင်းတွင်အစအပိတ်ဖြစ်လျှင် PHP သည်ယခင်အရင်းအမြစ်များကိုချက်ချင်းဖြန့်ချိမည်မဟုတ်ပါ။ အသစ်သော curl session တစ်ခုဖန်တီးတိုင်းအချိန်တိုင်းမှာမှတ်ဉာဏ်ပမာဏတစ်ခုစီကိုယူပြီးဇာတ်ညွှန်းကိုကွပ်မျက်ပြီးဆုံးသည်အထိသန့်ရှင်းရေးမလုပ်နိုင်ပါ။
curl အရင်းအမြစ်လုံးဝပိတ်ထားသည်မဟုတ် curl_close ကို မခေါ်မီအမှားတစ်ခုဖြစ်ပေါ်ပါကသို့မဟုတ်သင်ဆံပင်ကောက်ကောက် session ကိုမှန်ကန်စွာကွပ်မျက်ခံရကြောင်းသေချာမသိပါ။ ဥပမာအားဖြင့် curl_exec သည် အမှားအယွင်းများမှတစ်ဆင့်အမှားအယွင်းများကို curl_Error မှရရှိသောအမှားအယွင်းများမရရှိဘဲ မှားယွင်းစွာ ပြန်သွားသည်။
curl_close ကို အရင်းအမြစ်များကိုအခမဲ့အသုံးပြုရန်အသုံးပြုသော်လည်းတစ်ခါတစ်ရံတွင်မှတ်ဥာဏ်ကိုအပြည့်အဝလွတ်မြောက်စေရန်မလုံလောက်ပါ။ ကြိုးစားရန်နည်းလမ်းအချို့ကိုဤတွင်ဖော်ပြထားသည်။
unset ကို အသုံးပြုခြင်းသည် PHP variable များကိုရှင်းရှင်းလင်းလင်းမြင်နိုင်ရန်ကူညီနိုင်သည်။ curl_close ကွပ်မျက်ခံရရင်တောင် unset ကအရင်းအမြစ်ကိုရည်ညွှန်းခြင်းမရှိတော့ဘူးဆိုတာသေချာတယ်။
curl_close($ch);
unset($ch);
PHP တွင်အမှိုက်သရိုက်စုဆောင်းမှုကိုအလိုအလျောက်ပြုလုပ်သည် ။
curl_close($ch);
unset($ch);
gc_collect_cycles();
မှတ်ဥာဏ်အသုံးပြုမှုသည်အလွန်မြင့်မားနေဆဲဖြစ်ကြောင်းသင်တွေ့ရှိပါကမှတ်ဉာဏ်အသုံးပြုမှုကိုခွဲခြမ်းစိတ်ဖြာရန် memory_get_get_get_get_pepeak_usage ကို သုံး နိုင်သည်။ ၎င်းသည်မှတ်ဉာဏ်အမှန်တကယ်လွတ်မြောက်လာသည်ကိုပိုမိုနားလည်သဘောပေါက်ရန်သင့်အားပိုမိုနားလည်သဘောပေါက်ရန်ကူညီလိမ့်မည်။
echo "လက်ရှိမှတ်ဉာဏ်အသုံးပြုမှု: " . memory_get_usage() . " bytes";
echo "အများဆုံးမှတ်ဉာဏ်အသုံးပြုမှု: " . memory_get_peak_usage() . " bytes";
အကယ်. သင်သည်ဆံပင်ကောက်ကောက်တောင်းဆိုမှုများစွာကိုသင်ကွပ်ကဲနေပါကတောင်းဆိုမှုများအားလုံးကိုအကောင်အထည်ဖော်မည့်အစားတောင်းဆိုမှုများကိုထုတ်ယူခြင်းကိုစဉ်းစားပါ။ ၎င်းသည်မှတ်ဥာဏ်စီမံခန့်ခွဲမှုကိုအထောက်အကူပြုရုံသာမကဆာဗာဝန်ကိုလည်းလျှော့ချပေးသည်။
// အသုတ်အတွက်တောင်းဆိုမှုများမျိုးစုံ process
$urls = [
"https://gitbox.net/api1",
"https://gitbox.net/api2",
"https://gitbox.net/api3",
];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
curl_close($ch);
unset($ch);
}
တောင်းဆိုမှုများစွာကိုကွပ်မျက်ရန်လိုအပ်သည့်အခြေအနေများအတွက် curl ၏ Multi-Threaded Functions ( curl_maulti_ * series functions) ကို အသုံးပြု. (ဥပမာ curl_multi_ series) ကိုထိရောက်စွာလျှော့ချနိုင်သည်။ Multithreading သည်တောင်းဆိုမှုများကိုတစ်ပြိုင်နက်တည်းလုပ်ဆောင်နိုင်ပြီးမှတ်ဉာဏ်တစ်ခုတည်းတောင်းဆိုမှုကိုတစ်ခုတည်းတောင်းဆိုမှုကိုလျှော့ချနိုင်သည်။
$multiHandle = curl_multi_init();
$handles = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$handles[] = $ch;
}
do {
curl_multi_exec($multiHandle, $running);
} while ($running > 0);
foreach ($handles as $ch) {
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
curl_multi_close($multiHandle);