PHP တွင် FSOCOPEN သည်ကွန်ယက်ဆက်သွယ်မှုများကိုဖွင့်ရန်အတွက် function တစ်ခုဖြစ်ပြီးအထူးသဖြင့် proxy server တစ်ခုနှင့်ချိတ်ဆက်သောအခါ socket connection များကိုဖန်တီးရန်အသုံးပြုသည်။ fsocopen နှင့် debugging ၏သင့်လျော်သော fsocopen နှင့် debugging ၏ configurations configuration သည်ကွန်ယက်တောင်းဆိုမှုများကိုသေချာစေရန်သော့ချက်ဖြစ်သည်။ ဤဆောင်းပါးသည် FSOCOPEN Connection proxy server ကိုစနစ်တကျ configure လုပ်နည်းနှင့်ဆက်သွယ်မှုပြ issues နာများကိုပိုမိုကောင်းမွန်စွာရှာဖွေရန်နှင့်ဖြေရှင်းရန်ကူညီရန် Debugging Tire အချို့ကိုပြသသည်။
fsocckopen ကို ကွန်ယက်ချိတ်ဆက်မှုတစ်ခုဖွင့်လှစ်ရန်အသုံးပြုသည်။ ဆာဗာနှင့်ဆက်သွယ်မှုကို HTTP, HTTPS နှင့်အခြား protocols များမှတဆင့်ဆက်သွယ်ခြင်းကိုအသုံးပြုသည်။ အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
<span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$hostname</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> &</span><span><span class="hljs-variable">$errno</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> &</span><span><span class="hljs-variable">$errstr</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">float</span></span><span> </span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-title function_ invoke__">ini_get</span></span><span>(</span><span><span class="hljs-string">"default_socket_timeout"</span></span><span>))
</span></span>
$ hostname : ပစ်မှတ်အိမ်ရှင်သို့မဟုတ် proxy server ၏လိပ်စာ၏လိပ်စာ။
$ port : Target Server ၏ port နံပါတ်, မူလ HTTP သည် 80 ဖြစ်ပြီးပုံမှန် https သည် 443 ဖြစ်သည်။
$ errno : connection အမှားအတွက်အမှားကုဒ်။
$ errorstr : အမှားမက်ဆေ့ခ်ျကို။
$ Timeout : ဆက်သွယ်မှုအချိန်ကုန်, ယူနစ်စက္ကန့်။
Proxy server မှတဆင့် Target Host ကိုချိတ်ဆက်ရန်ကျွန်ုပ်တို့သည် proxy server ၏ IP address နှင့် port မှတဆင့်ဆက်သွယ်မှုတစ်ခုတည်ဆောက်ရန်လိုအပ်သည်။ ယေဘုယျအားဖြင့်ပြောရလျှင် Proxy server သည်သင့်အားတိကျသောစစ်မှန်ကြောင်းအတည်ပြုခြင်းဆိုင်ရာအချက်အလက်များကိုပေးရန်လိုအပ်လိမ့်မည်။ ထို့ကြောင့် proxy settings ၏မှန်ကန်မှုကိုသေချာစေရန်လိုအပ်သည်။
ဤတွင် proxy server တစ်ခုမှတဆင့်ဝေးလံခေါင်သီသောအိမ်ရှင်နှင့်မည်သို့ဆက်သွယ်ရမည်ကိုပြသသည့်ရိုးရှင်းသောဥပမာတစ်ခုမှာ -
<span><span><span class="hljs-variable">$proxy</span></span><span> = </span><span><span class="hljs-string">'proxy.example.com'</span></span><span>; </span><span><span class="hljs-comment">// proxy server လိပ်စာ</span></span><span>
</span><span><span class="hljs-variable">$proxy_port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>; </span><span><span class="hljs-comment">// proxy port</span></span><span>
</span><span><span class="hljs-variable">$target</span></span><span> = </span><span><span class="hljs-string">'example.com'</span></span><span>; </span><span><span class="hljs-comment">// ပစ်မှတ်အိမ်ရှင်</span></span><span>
</span><span><span class="hljs-variable">$target_port</span></span><span> = </span><span><span class="hljs-number">80</span></span><span>; </span><span><span class="hljs-comment">// ဆိပ်ကမ်းဆိပ်ကမ်း</span></span><span>
</span><span><span class="hljs-comment">// proxy server ကိုဆက်သွယ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$proxy_socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-variable">$proxy</span></span><span>, </span><span><span class="hljs-variable">$proxy_port</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$proxy_socket</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"无法proxy server ကိုဆက်သွယ်ပါ: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// proxy တောင်းဆိုမှုကိုပေးပို့ပါ</span></span><span>
</span><span><span class="hljs-variable">$request</span></span><span> = </span><span><span class="hljs-string">"GET http://<span class="hljs-subst">$target</span></span></span><span>/ HTTP/1.1\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$target</span></span></span><span>\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Connection: Close\r\n"</span></span><span>;
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"\r\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$proxy_socket</span></span><span>, </span><span><span class="hljs-variable">$request</span></span><span>);
</span><span><span class="hljs-comment">// proxy server တုံ့ပြန်မှုကိုရယူပါ</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$proxy_socket</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$proxy_socket</span></span><span>, </span><span><span class="hljs-number">128</span></span><span>);
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$proxy_socket</span></span><span>);
}
</span></span>
proxy server သည် authentication လိုအပ်သည်ဆိုပါကတောင်းဆိုမှုကိုပေးပို့သည့်အခါသက်ဆိုင်ရာ authentication ကိုသတင်းအချက်အလက်များကိုသင်ပေးရန်လိုအပ်သည်။ ပုံမှန်အားဖြင့် proxy authentication သည်အခြေခံစစ်မှန်ကြောင်းအတည်ပြုခြင်းသို့မဟုတ်အခြား authentication ယန္တရားများကိုအသုံးပြုသည်။
အခြေခံ authentication ကို ခွင့်ပြုချက် ခေါင်းစဉ်ကိုအသုံးပြုခြင်းဖြင့်ရရှိနိုင်သည်။
<span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'my_username'</span></span><span>;
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">'my_password'</span></span><span>;
</span><span><span class="hljs-comment">// အသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုလုပ်ပါ Base64 ကုဒ်</span></span><span>
</span><span><span class="hljs-variable">$auth</span></span><span> = </span><span><span class="hljs-title function_ invoke__">base64_encode</span></span><span>(</span><span><span class="hljs-string">"<span class="hljs-subst">$username</span></span></span><span>:</span><span><span class="hljs-subst">$password</span></span><span>");
</span><span><span class="hljs-variable">$request</span></span><span> = </span><span><span class="hljs-string">"GET http://<span class="hljs-subst">$target</span></span></span><span>/ HTTP/1.1\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$target</span></span></span><span>\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Connection: Close\r\n"</span></span><span>;
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Proxy-Authorization: Basic <span class="hljs-subst">$auth</span></span></span><span>\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"\r\n"</span></span><span>;
</span><span><span class="hljs-comment">// တောင်းဆိုမှုကိုပို့ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$proxy_socket</span></span><span>, </span><span><span class="hljs-variable">$request</span></span><span>);
</span></span>
proxy server ဆက်သွယ်မှုကိုစစ်ဆေးပါ သင် proxy server တစ်ခုနှင့် ချိတ်ဆက်. မရနိုင်သောအခြေအနေကိုသင်ကြုံတွေ့ရပါက proxy server ရောက်ရှိနိုင်မည်ကို ဦး စွာစစ်ဆေးပါ။ ဆက်သွယ်မှုပုံမှန်ဖြစ်လျှင်စမ်းသပ်ရန် Ping သို့မဟုတ် Telnet ကဲ့သို့သော command line tools များကိုသင်အသုံးပြုနိုင်သည်။ ဥပမာအားဖြင့်:
<span><span>ping proxy.example.com
telnet proxy.example.com 8080
</span></span>
debugging သတင်းအချက်အလက်ပုံနှိပ် PHP တွင် Var_Dump သို့မဟုတ် ECHO ကို သုံးရန် proxy တောင်းဆိုမှုကိုပုံမှန်အားဖြင့်ပို့ခြင်းဟုတ်မဟုတ်ကိုသင် debuggug ည့်သည်ကိုကူညီရန်နှင့်တုံ့ပြန်မှုများပါ 0 င်သည်။ မမျှော်လင့်သောအမှားအယွင်းများသို့မဟုတ်တုန့်ပြန်မှုအကြောင်းအရာများကိုလည်းသင်စစ်ဆေးနိုင်သည်။
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"တောင်းဆိုမှုကို SED:\n"</span></span><span> . </span><span><span class="hljs-variable">$request</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"တုံ့ပြန်မှုအကြောင်းအရာ:\n"</span></span><span>;
</span></span>
ကျိုးကြောင်းဆီလျော်သောအချိန်ကုန်ကိုသတ်မှတ်ပါ အကယ်. ဆက်သွယ်မှုအချိန်ကြာမြင့်စွာနေပါကအချိန်ကုန်အချိန်ကိုသင့်လျော်စွာတိုးမြှင့်နိုင်သည်သို့မဟုတ်လျော့နည်းသွားနိုင်သည်။ အလွန်အကျွံအချိန်ကြာမြင့်စွာအချိန်ကုန်ခြင်းသည်တောင်းဆိုမှုကိုရပ်တန့်စေနိုင်သည်။
<span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">10</span></span><span>; </span><span><span class="hljs-comment">// ဆက်သွယ်မှုအချိန်ကုန်ကိုသတ်မှတ်ပါ 10 စက်ဏန့်</span></span><span>
</span></span>
proxy server logr> <br> အကယ်. သင်သည် PHP ကုဒ်မှပြ the နာကိုတိုက်ရိုက်မရှာနိုင်ပါက proxy server ၏ log files များကိုစစ်ဆေးရန်ကောင်းသောနည်းလမ်းဖြစ်သည်။ proxy server တစ်ခုသည်များသောအားဖြင့်ဆက်သွယ်မှုသည်အောင်မြင်မှုလိုအပ်သည်,
fsocckopen အစား stream_socket_client ကို သုံးပါ
ဆက်သွယ်မှုများနှင့်ဒေတာများကိုသင်ကိုင်တွယ်လိုပါကပိုမိုပြောင်းလွယ်ပြင်လွယ်စွာစီးဆင်းစေလိုပါက Richer Parameter settings ကိုထောက်ပံ့သော FSocCkopen အစား stream_socket_client ကို သုံးနိုင်သည်။
ဥပမာ -
<span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'proxy'</span></span><span> => </span><span><span class="hljs-string">'tcp://proxy.example.com:8080'</span></span><span>,
</span><span><span class="hljs-string">'request_fulluri'</span></span><span> => </span><span><span class="hljs-literal">true</span></span><span>,
]
]);
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'http://example.com'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span></span>
proxy ဆက်သွယ်မှုအချိန်ကုန် ဆက်သွယ်မှုအချိန်ကုန်များသည်များသောအားဖြင့်ကွန်ယက်အခြေအနေများသို့မဟုတ် proxy server ၏ configuration နှင့်ဆက်စပ်သောဖြစ်ကြသည်။ ဤပြ problem နာကိုအချိန်ကုန်ကိုတိုးမြှင့်ခြင်းသို့မဟုတ်အခြား proxy server ကိုအစားထိုးခြင်းဖြင့်ဖြေရှင်းနိုင်သည်။
အေးဂျင့်စစ်မှန်ကြောင်းအတည်ပြုခြင်းမအောင်မြင်ပါ သင်၏ authentication ၏သတင်းအချက်အလက်သည်အထူးသဖြင့် Username နှင့် Password of Said64 encoding ကိုသေချာအောင်လုပ်ပါ။ အကယ်. သင်သည်အခြား authentication အမျိုးအစားများ (ဥပမာ - NTLM သို့မဟုတ် Digest ကဲ့သို့သော) ကိုအသုံးပြုနေပါကသင်ကိုင်တွယ်ရန်စာကြည့်တိုက်များသို့မဟုတ်ပိုမိုရှုပ်ထွေးသောချဉ်းကပ်မှုများလိုအပ်သည်။
တုန့်ပြန်မှုအကြောင်းအရာသည်ဗလာသို့မဟုတ်ပုံစံသည်မမှန်ကန်ပါ ဤအခြေအနေသည် proxy server သည်တောင်းဆိုမှုကိုမှန်ကန်စွာပေးပို့ခြင်းမဟုတ်သည့် proxy server ကြောင့်ဖြစ်နိုင်သည်သို့မဟုတ်ပစ်မှတ်ဆာဗာကို proxy မှတဆင့်လက်လှမ်းမမီပါ။ proxy server ၏ Debug Log ကိုသင်သုံးနိုင်သည်သို့မဟုတ် proxy server ၏အပြုအမူကိုအတည်ပြုရန် Postman ကဲ့သို့သောအခြား network tools များကိုသုံးနိုင်သည်။