PHP တွင် curl_share_init သည်အလွန်အသုံးဝင်သောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ အရင်းအမြစ်များအတွက်ထပ်ခါတလဲလဲတောင်းဆိုမှုများကိုပိုမိုသက်သာစေရန်နှင့်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရန်အတွက်တူညီသောအရင်းအမြစ်များကဲ့သို့သောအရင်းအမြစ်များကိုတူညီသောအရင်းအမြစ်များကိုမျှဝေရန်တောင်းဆိုမှုများစွာကိုခွင့်ပြုသည်။ အမှန်တကယ် application များအနေဖြင့်ကျွန်ုပ်တို့သည်တောင်းဆိုမှုများကိုဗဟိုစီမံခန့်ခွဲခြင်း, ပြင်ဆင်ခြင်းသို့မဟုတ်ကြားဖြတ်ခြင်း,
ဤဆောင်းပါးသည် curl_share_init ကို အထောက်အကူပြုသော Middleware Interceptor ကိုမည်သို့တည်ဆောက်ရမည်ကိုရှင်းပြပြီးလက်တွေ့ကျသောဥပမာများဖြင့်ဤလုပ်ငန်းစဉ်ကိုပိုမိုနားလည်ရန်ကူညီပေးပါမည်။
Middleware Interceptor ဆိုသည်မှာတောင်းဆိုမှုများနှင့်တုံ့ပြန်မှုများကိုကြားဖြတ်လေ့ရှိပြီးတုံ့ပြန်မှုများမ 0 င်ခင်နှင့်တုန့်ပြန်မှုအရွက်ပြီးနောက်အချို့သောစစ်ဆင်ရေးများကိုပြုလုပ်နိုင်သည်။ ပုံမှန်အားဖြင့်၎င်းတို့အားမှတ်တမ်းများ, authentication, cache control, header ဖြည့်စွက်ခြင်း, တုံ့ပြန်မှုပုံစံချခြင်း,
ကျွန်ုပ်တို့၏ကိစ္စတွင်ကြားဖြတ်သည်ကောက်ကောက်တောင်းခံခြင်းမပြုမီသို့မဟုတ်ပြီးနောက်အပိုဆောင်းအပြောင်းအလဲများကိုပြုလုပ်လိမ့်မည်။ curl_share_init ကို ထောက်ပံ့သော Middleware ကိုကျွန်ုပ်တို့၏ရည်မှန်းချက်အတွက်ကျွန်ုပ်တို့၏ရည်မှန်းချက်မှာ curl တောင်းဆိုမှုများစွာတွင် session တစ်ခုပေါင်းသင်းဆက်မှုတစ်ခုမျှဝေရန်သေချာစေရန်ဖြစ်သည်။
Curl တောင်းဆိုမှုကြားဖြတ်ကိုကိုင်တွယ်ရန်အထူးအသုံးပြုသော Middleware Class ကိုကျွန်ုပ်တို့ဖန်တီးနိုင်သည်။ ဤအတန်းသည်အခြေခံအစတစ်ခုနှင့်အရင်းအမြစ်စီမံခန့်ခွဲမှုဆိုင်ရာလုပ်ဆောင်မှုများကိုပေးလိမ့်မည်။
class CurlMiddleware
{
private $shareHandle;
public function __construct()
{
// မျှဝေထားသောအရင်းအမြစ်များကိုစတင်ပါ
$this->shareHandle = curl_share_init();
}
public function __destruct()
{
// shared အရင်းအမြစ်များကိုဖျက်ဆီး
if ($this->shareHandle) {
curl_share_close($this->shareHandle);
}
}
public function handleRequest($url, $options = [])
{
// တည်ဆောက်သည် cURL အရင်းအမြစ်များကိုမျှဝေပါ
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SHARE, $this->shareHandle);
// တည်ဆောက်သည်其他 cURL ရွေးချယ်စရာများ
curl_setopt_array($ch, $options);
// တောင်းဆိုမှုကို execute
$response = curl_exec($ch);
if (curl_errno($ch)) {
// အမှားကိုင်တွယ်
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $response;
}
}
အထက်ပါကုဒ်တွင်အခြေခံ curlmnware class ကိုအကောင်အထည်ဖော်ခဲ့သည်။ ၎င်းသည်၎င်းကို middleware တစ်ခုပြုလုပ်ရန်အတွက်အချို့သည်အပြန်အလှန်ဆက်သွယ်မှုဆိုင်ရာယုတ္တိဗေဒကိုထည့်သွင်းခြင်းဖြင့်တောင်းဆိုမှုနှင့်တုန့်ပြန်မှုကိုကျွန်ုပ်တို့ထိန်းချုပ်နိုင်သည်။
တောင်းဆိုမှုများသို့မဟုတ်တုန့်ပြန်မှုများကို လက်လှမ်းမီ နည်းဖြင့်တောင်းဆိုမှုများသို့မဟုတ်တုံ့ပြန်မှုများကိုကြားဖြတ်ရန်နှင့်ပြုပြင်ခြင်းများကိုပြင်ဆင်ရန်နှင့်ပြုပြင်ခြင်းများကိုကျွန်ုပ်တို့ထည့်သွင်းနိုင်သည်။
class CurlMiddleware
{
private $shareHandle;
public function __construct()
{
// မျှဝေထားသောအရင်းအမြစ်များကိုစတင်ပါ
$this->shareHandle = curl_share_init();
}
public function __destruct()
{
// shared အရင်းအမြစ်များကိုဖျက်ဆီး
if ($this->shareHandle) {
curl_share_close($this->shareHandle);
}
}
public function beforeRequest($url, $options)
{
// တောင်းဆိုမှုကိုမပို့မီလုပ်ဆောင်ချက်များ(ဥပမာအားဖြင့်, ပြုပြင်မွမ်းမံ URL 或တည်ဆောက်သည်额外的ရွေးချယ်စရာများ)
$parsedUrl = parse_url($url);
$url = 'https://m66.net' . $parsedUrl['path']; // ဒိုမိန်းအမည်ကိုအစားထိုးပါ
return $url;
}
public function afterRequest($response)
{
// တောင်းဆိုမှုများပြီးနောက်ဖျော်ဖြေလုပ်ဆောင်ချက်များ(ဥပမာသစ်ထုတ်လုပ်ခြင်းသည်、တုံ့ပြန်မှု format)
// ဤတွင်ကျွန်ုပ်တို့သည်တုန့်ပြန်မှုများကိုပြုပြင်မွမ်းမံခြင်းသို့မဟုတ်မှတ်တမ်းကိုမှတ်တမ်းတင်နိုင်သည်
return $response;
}
public function handleRequest($url, $options = [])
{
// ကြိုတင်စစ်ဆင်ရေး:ပြန်လည်စစ်ဆေးကြည့်ရှု URL 或者其他ရွေးချယ်စရာများ
$url = $this->beforeRequest($url, $options);
// တည်ဆောက်သည် cURL အရင်းအမြစ်များကိုမျှဝေပါ
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SHARE, $this->shareHandle);
// တည်ဆောက်သည်其他 cURL ရွေးချယ်စရာများ
curl_setopt_array($ch, $options);
// တောင်းဆိုမှုကို execute
$response = curl_exec($ch);
if (curl_errno($ch)) {
// အမှားကိုင်တွယ်
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
// စစ်ဆင်ရေး:ထုတ်ယူခြင်းတုံ့ပြန်မှု
return $this->afterRequest($response);
}
}
ယခု Curlmnsware class သည်တောင်းဆိုမှုတစ်ခုချင်းစီမတိုင်မီနှင့်အပြီးအပြီးအချို့သောကြားဖြတ်သည့်ယုတ္တိဗေဒကိုလုပ်ဆောင်နိုင်သည်။ အမှန်တကယ်အသုံးပြုမှုတွင်ကျွန်ုပ်တို့သည်လူအမျိုးမျိုးဥပမာအားဖြင့်သာပြုလုပ်ရန်လိုအပ်ပြီးတောင်းဆိုမှုကိုပြုလုပ်ရန် handlerequest နည်းလမ်းကိုခေါ်ဆိုရန်လိုအပ်သည်။
$middleware = new CurlMiddleware();
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true
];
// မေးမြန်း URL
$url = 'https://example.com/api/data';
// 发送မေးမြန်း
$response = $middleware->handleRequest($url, $options);
// တုံ့ပြန်မှုရလဒ်များကိုပုံနှိပ်ပါ
echo $response;
Curl_Share_init ကိုသုံးပြီးကတည်းက curl curl တောင်းဆိုမှုများသည်တူညီသောအရင်းအမြစ်များကိုတူညီသောအရင်းအမြစ်များကိုမျှဝေလိမ့်မည် (ကွတ်ကီးများ, ၎င်းသည်ပြည်နယ်များကိုတောင်းဆိုမှုများကို ဖြတ်. ခွဲဝေချထားပေးရန်လိုအပ်သည့်အခြေအနေများအတွက်အလွန်အသုံးဝင်သည်။ ကျွန်ုပ်တို့၏အိုင်အလာတွင် curl တောင်းဆိုမှုများအားလုံးသည်တူညီသော session data ကိုမျှဝေရန်သေချာသည့်တူညီသော shaled လက်ကိုင်ကိုအသုံးပြုသည်။
သတိပြုသင့်သည်အချို့ကိစ္စရပ်များတွင် curl_share_init ၏အပြုအမူကိုအထူးသဖြင့်တောင်းဆိုမှုများစွာသည်ထပ်တူသိမ်းဆည်းထားသောအရင်းအမြစ်များကိုထပ်တူပြုခြင်းရရန်လိုအပ်သည်။
ဤဆောင်းပါးတွင် curl_share_init ကို ထောက်ပံ့သော Middleware Interceptor ကိုမည်သို့တည်ဆောက်ရမည်ကိုပြသသည်။ ထိုကဲ့သို့သော middleware မှတစ်ဆင့်ကျွန်ုပ်တို့သည်သစ်ခုတ်ခြင်း, အမှားပြုပြင်ခြင်း, URL ပြုပြင်မွမ်းမံခြင်းနှင့်အခြားစစ်ဆင်ရေးများပြုလုပ်ရန်အကြိမ်များစွာစတင်ရန်တောင်းဆိုမှုများနှင့်တုန့်ပြန်မှုများနှင့်တုန့်ပြန်မှုများနှင့်တုန့်ပြန်မှုများအားဝေငှနိုင်သည်။