လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> FSOCOPEN function မှတဆင့်ဒေတာများကိုပေးပို့ခြင်းအားဖြင့် socket သို့ဒေတာထုတ်လွှင့်မှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။ အကြံဥာဏ်တွေကဘာတွေလဲ။

FSOCOPEN function မှတဆင့်ဒေတာများကိုပေးပို့ခြင်းအားဖြင့် socket သို့ဒေတာထုတ်လွှင့်မှုကိုမည်သို့အကောင်အထည်ဖော်ရမည်နည်း။ အကြံဥာဏ်တွေကဘာတွေလဲ။

gitbox 2025-06-21

PHP တွင် FSOCOPEN function သည် socket connections များကိုဖန်တီးရန်အများအားဖြင့်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ၎င်းသည်သင့်အားဝေးလံခေါင်သီသောဆာဗာများနှင့်အချက်အလက်များကိုဆက်သွယ်ရန်ခွင့်ပြုသည်။ fsocckopen နှင့်အတူသင်သည်ရိုးရှင်းသော socket data transfer ကိုသင်အကောင်အထည်ဖော်နိုင်သည်။ ၎င်းသည်အဆင့်နိမ့်သောကွန်ယက်စစ်ဆင်ရေးလိုအပ်သည့် application များအတွက်အလွန်အသုံးဝင်သည်။ ဒေတာထုတ်လွှင့်ခြင်းအားအကောင်အထည်ဖော်ရန်နှင့်အသုံးပြုရန်အတွက်အသုံးပြုနိုင်သောအကြံဥာဏ်များကိုမျှဝေရန် FSOCOPEN ကို မည်သို့အသုံးပြုရမည်ကိုဤဆောင်းပါးသည်လေ့လာကြည့်ရှုပါမည်။

1 ။ fsocckopen function ကိုအခြေခံအသုံးပြုခြင်း

fsocckopen function ကိုကွန်ယက်ချိတ်ဆက်မှုကိုဖွင့်ရန်အသုံးပြုသည်။ TCP သို့မဟုတ် UDP sockets များကိုဖန်တီးရန်အသုံးပြုနိုင်သည်။ အခြေခံအကျဆုံးလုပ်ဆောင်ချက်ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 <span><span>resource </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-keyword">int</span></span><span> &amp;</span><span><span class="hljs-variable">$errno</span></span><span> [, </span><span><span class="hljs-keyword">string</span></span><span> &amp;</span><span><span class="hljs-variable">$errstr</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 : destination hostname သို့မဟုတ် IP address ကို။

  • $ port : ပစ်မှတ်ထား port နံပါတ်။

  • $ errno နှင့် $ errarstr : အမှားမက်ဆေ့ခ်ျကိုဖမ်းယူဖို့ optional parameters တွေကို။

  • $ အချိန် - စက္ကန့်ပိုင်းအတွင်းရှိ optional connection timeout ။

အသုံးပြုမှု၏ရိုးရှင်းသောဥပမာ -

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'www.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">80</span></span><span>;
</span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">30</span></span><span>; </span><span><span class="hljs-comment">// အချိန်ကုန်အချိန်ကိုသတ်မှတ်ပါ 30 စက်ဏန့်</span></span><span>

</span><span><span class="hljs-comment">// အသုံးပြု fsockopen ဆက်သွယ်မှုတစ်ခုတည်ဆောက်ပါ</span></span><span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$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-variable">$timeout</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အမှား: <span class="hljs-subst">$errno</span></span></span><span> - </span><span><span class="hljs-subst">$errstr</span></span><span>&lt;br /&gt;\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အောင်မြင်စွာချိတ်ဆက် <span class="hljs-subst">$host</span></span></span><span>:</span><span><span class="hljs-subst">$port</span></span><span>&lt;br /&gt;\n";
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

2 ။ ဒေတာထုတ်လွှင့်မှုအတွက် fsocopen ကို သုံးပါ

ဆက်သွယ်မှုကိုစတင်တည်ထောင်ပြီးသည်နှင့်သင်သည်ဆာဗာနှင့်ဒေတာလွှဲပြောင်းမှုကိုစတင်နိုင်သည်။ HTTP protocol ဆက်သွယ်ရေးအတွက်သင်များသောအားဖြင့်တောင်းဆိုမှု header ကိုပို့ရန်လိုအပ်ပြီးသက်ဆိုင်ရာအချက်အလက်များကိုဆာဗာကတုံ့ပြန်လိမ့်မည်။ ဤတွင်ရိုးရှင်းသော http တောင်းဆိုမှုကိုဥပမာတစ်ခု -

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'www.example.com'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">80</span></span><span>;
</span><span><span class="hljs-variable">$timeout</span></span><span> = </span><span><span class="hljs-number">30</span></span><span>;

</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fsockopen</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$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-variable">$timeout</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"အမှား: <span class="hljs-subst">$errno</span></span></span><span> - </span><span><span class="hljs-subst">$errstr</span></span><span>&lt;br /&gt;\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-comment">// တည်ဆောက် HTTP တောင်းဆိုချက် header</span></span><span>
    </span><span><span class="hljs-variable">$request</span></span><span> = </span><span><span class="hljs-string">"GET / HTTP/1.1\r\n"</span></span><span>;
    </span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$host</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-comment">// တောင်းဆိုမှုကိုပို့ပါ</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$request</span></span><span>);

    </span><span><span class="hljs-comment">// လက်ခံခြင်းနှင့် output 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">$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">$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">$socket</span></span><span>);
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

အထက်ပါကုဒ်တွင်ဆက်သွယ်မှုကိုတည်ဆောက်ရန် FSOCOPEN ကို အသုံးပြု သည်။ ထို့နောက်ဆာဗာမှပြန်လာသောအချက်အလက်များကိုဖတ်ရန် HTTP တောင်းဆိုမှုခေါင်းစဉ်ကိုဆာဗာသို့ပို့ပါ နောက်ဆုံးအနေဖြင့် fcose မှတဆင့် Socket connection ကိုပိတ်ပါ။

3 ။ ဘုံအကြံပြုချက်များနှင့်ကြိုတင်ကာကွယ်မှုများ

3.1 အချိန်ကုန်ထားပါ

ကွန်ယက်ပရိုဂရမ်တွင်အထူးသဖြင့်သင်ဝေးလံသောဆာဗာတစ်ခုနှင့်သင်အပြန်အလှန်ဆက်သွယ်သည့်အချိန်ကြာမြင့်စွာအချိန်ကုန်ဆုံးသောအချိန်ကုန်ခံခြင်းသည်အလွန်အရေးကြီးသည်။ ဆက်သွယ်မှုအချိန်ကို FSOCOPEN$ အချိန်ကုန် parameter မှတဆင့်ထိန်းချုပ်နိုင်သည်။ သင်သတ်မှတ်ထားသည့်အချိန်ကုန်ခြင်းသည်အလွန်တိုတောင်းပါက၎င်းသည်အချိန်မတန်မီဆက်သွယ်မှုပြတ်တောက်မှုဖြစ်စေနိုင်သည်။ အကယ်. ၎င်းသည်ရှည်လျားလွန်းပါက၎င်းသည်မတတ်နိုင်သောအခါအစီအစဉ်ကိုဆိုင်းငံ့ထားနိုင်သည်။ အချိန်ကုန်လွှာကိုစက္ကန့် 30 အတွင်းသတ်မှတ်ထားရန်အကြံပြုသည်။

 <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>

3.2 အမှားကိုင်တွယ်

FSOCCKOPEN function ၏ပြန်လာတန်ဖိုးမှာအရင်းအမြစ်အမျိုးအစား (Socket Connection သို့လက်ကိုင်ချိတ်ဆက်မှု) သည်အရင်းအမြစ်အမျိုးအစား (Socket Connection သို့ လက်ကိုင် ) ဖြစ်သည်။ အမှားအယွင်းများကိုရှောင်ရှားရန်နှင့်၎င်းတို့ကိုကိုင်တွယ်ရန်အမှားကုဒ် $ errno နှင့်အသေးစိတ်မှတ်တမ်းများအတွက် အမှားအယွင်းများကို အသုံးပြုရန်အကြံပြုသည်။

 <span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆက်သွယ်မှုမအောင်မြင်ပါ:<span class="hljs-subst">$errno</span></span></span><span> - </span><span><span class="hljs-subst">$errstr</span></span><span>&lt;br /&gt;\n";
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span></span>

3.3 ဒေတာထုတ်လွှင့်မှုပုံစံ

HTTP တောင်းဆိုမှုများကိုပေးပို့ခြင်းအပြင် FSCOPEN သည် FTP, SMPP , Pop3 စသည့်အခြား protocols များမှအချက်အလက်များကိုပေးပို့ရန်လည်းအသုံးပြုနိုင်သည် protocol ပေါ် မူတည်. အချက်အလက်ပုံစံပြောင်းလဲနိုင်သည်။ ဒေတာများကိုမပို့မီပစ်မှတ် protocol ၏တောင်းဆိုမှုပုံစံနှင့်အကျွမ်းတဝင်ရှိရန်အကြံပြုသည်။

3.4 မြဲဆက်သွယ်မှု

အချို့ဖြစ်ရပ်များတွင်၎င်းသည်ဆာဗာနှင့်ရေရှည်ဆက်သွယ်မှုကိုထိန်းသိမ်းရန်နှစ်လိုဖွယ်ကောင်းနိုင်သည်။ ဆက်သွယ်မှုကိုထည့်ခြင်းအားဖြင့် - တောင်းဆိုမှု header တွင်ရှင်သန်နေပါ , တောင်းဆိုမှုများစွာအကြား unclosed ဆက်သွယ်မှုကိုသိမ်းဆည်းထားနိုင်သည်။

 <span><span><span class="hljs-variable">$request</span></span><span> = </span><span><span class="hljs-string">"GET / HTTP/1.1\r\n"</span></span><span>;
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$host</span></span></span><span>\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Connection: keep-alive\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>

3.5 proxy server ကိုအသုံးပြုခြင်း

တစ်ခါတစ်ရံတွင် proxy server မှတဆင့် target server ဖြင့်ဆက်သွယ်ရန်လိုအပ်နိုင်သည်။ ဤအချိန်တွင် proxy server ၏လိပ်စာနှင့် port ကို Target Server နှင့်တိုက်ရိုက်ဆက်သွယ်မည့်အစား fsocopen သို့ကူးယူနိုင်သည်။

 <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-variable">$proxyPort</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;

</span><span><span class="hljs-variable">$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">$proxyPort</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-variable">$timeout</span></span><span>);
</span></span>

Proxy server သည်တိကျသော authentication information (ဥပမာအသုံးပြုသူအမည်နှင့်စကားဝှက်) တိကျသော authentication ကိုသတင်းအချက်အလက်လိုအပ်နိုင်ကြောင်းသတိပြုသင့်သည်။

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

fsocckopen သည် PHP တွင်အလွန်အစွမ်းထက်သော function တစ်ခုဖြစ်သည်။ အဆင့်နိမ့်သောကွန်ယက်ဆက်သွယ်ရေးအတွက်သင့်တော်သည်။ ဝေးလံခေါင်သီသောဆာဗာများနှင့်ဒေတာများကိုဖလှယ်ရန်လိုအပ်သည့်အခါ FSOCOPEN သည် တိုက်ရိုက်နှင့်ပြောင်းလွယ်ပြင်လွယ်ရှိသောနည်းလမ်းဖြစ်သည်။ အခြေခံအသုံးပြုမှုနည်းလမ်းများ, အချိန်ကုန်ချိန်ညှိချက်များ, ပုံမှန် protocol များ, အမှားကိုင်တွယ်ခြင်းနှင့်သယ်ယူပို့ဆောင်ရေးနှင့်သယ်ယူပို့ဆောင်ရေးနည်းစနစ်များသည် socket data stritting ကိုပိုမိုထိရောက်စွာနားလည်သဘောပေါက်ရန်အထောက်အကူပြုလိမ့်မည်။ လက်တွေ့ကျသော application များအရ parameters တွေကိုလိုအပ်ချက်များနှင့်အညီညှိနှိုင်းရန်နှင့်ကွန်ယက်တောင်းဆိုမှုများတည်ငြိမ်မှုကိုသေချာစေရန်သတိရပါ။