PHP, Gallervbyname (String $ 0 န်ဆောင်မှုပေးခြင်း, string) တွင် 0 န်ဆောင်မှုအမည်ပေါ် မူတည်. သက်ဆိုင်ရာ port နံပါတ် (decimal integer) ကိုပြန်ပို့နိုင်သည် ( HTTP , SSH ) နှင့် Protocol ( TCP သို့မဟုတ် UDP ) ။ အကယ်. 0 န်ဆောင်မှုအမည်ကိုရှာမတွေ့နိုင်ပါကအမှားတစ်ခုဖြစ်ပါက function သည် မှားယွင်းသော အရာဖြစ်သည်။ ထို့ကြောင့်ကျွန်ုပ်တို့သည် system service database (Windows အတွက် 0 န်ဆောင်မှုဖိုင်များ) တွင် 0 န်ဆောင်မှုဆိုင်ရာအမည်တစ်ခုတွင် 0 န်ဆောင်မှုအမည်ရှိခြင်းရှိ, မရှိဆုံးဖြတ်ရန်၎င်းကိုကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။
အောက်ပါဥပမာသည်အသုံးများသောအသုံးများခြင်း, encapsulation ပြုလုပ်ခြင်းသည်လုပ်ဆောင်ချက်များ, ထည့်သွင်းစဉ်းစားခြင်းနှင့်အပိုဆောင်းအသုံးချခြင်းနည်းလမ်းများနှင့်အမှန်တကယ်ရရှိနိုင်မှုအတွက်နောက်ထပ်ရှာဖွေတွေ့ရှိမှုနည်းလမ်းများအားပြသသည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$service</span></span><span> = </span><span><span class="hljs-string">'http'</span></span><span>;
</span><span><span class="hljs-variable">$protocol</span></span><span> = </span><span><span class="hljs-string">'tcp'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getservbyname</span></span><span>(</span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-variable">$protocol</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$port</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဝန်ဆောင်မှုအမည် '<span class="hljs-subst">{$service}</span></span></span><span>'(တည်ဆောက်မှု </span><span><span class="hljs-subst">{$protocol}</span></span><span>)ဇာတိဝန်ဆောင်မှုဒေတာဘေ့စတွင်မတည်ရှိပါဘူး。\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">{$service}</span></span></span><span>'(</span><span><span class="hljs-subst">{$protocol}</span></span><span>)ဆိပ်ကမ်းသို့မြေပုံ:</span><span><span class="hljs-subst">{$port}</span></span><span>\n";
}
</span></span>ဤလုပ်ဆောင်ချက်သည်ပိုမိုအားကောင်းသည့်တရားစီရင်ခြင်းကိုပြုလုပ်လိမ့်မည်။ GainverbbyName Return Value ကိုစစ်ဆေးပါ။ Port နံပါတ်သည်တရားဝင်အကွာအဝေးအတွင်းရှိ (1-65535) အတွင်း၌တည်ရှိကြောင်းသေချာပါစေ။
<span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/**
* 判断ဝန်ဆောင်မှုအမည်称是否有效(在ဒီစက်အစေခံ数据库中有对应端口)
*
* </span></span><span><span class="hljs-doctag">@param</span></span><span> string $service ဝန်ဆောင်မှုအမည်称,ဥပမာအားဖြင့် 'http'、'ssh'
* </span><span><span class="hljs-doctag">@param</span></span><span> string $protocol တည်ဆောက်မှု 'tcp' သို့မဟုတ် 'udp'
* </span><span><span class="hljs-doctag">@return</span></span><span> bool ပြန်လာ true တရားဝင်ဆိုလိုသည်(တရားဝင်ဆိပ်ကမ်းကိုရှာပါ),false 表示无效သို့မဟုတ်出错
*/
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">is_service_name_valid</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$protocol</span></span><span> = </span><span><span class="hljs-string">'tcp'</span></span><span>): </span><span><span class="hljs-title">bool</span></span><span>
{
</span><span><span class="hljs-comment">// ပုံမှန် parameters တွေကို</span></span><span>
</span><span><span class="hljs-variable">$protocol</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$protocol</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">in_array</span></span><span>(</span><span><span class="hljs-variable">$protocol</span></span><span>, [</span><span><span class="hljs-string">'tcp'</span></span><span>, </span><span><span class="hljs-string">'udp'</span></span><span>], </span><span><span class="hljs-literal">true</span></span><span>)) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-variable">$port</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">getservbyname</span></span><span>(</span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-variable">$protocol</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$port</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-comment">// ဆိပ်ကမ်းကိုဥပဒေရေးရာနယ်ပယ်တွင်သေချာအောင်လုပ်ပါ</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$port</span></span><span>) && </span><span><span class="hljs-variable">$port</span></span><span> >= </span><span><span class="hljs-number">1</span></span><span> && </span><span><span class="hljs-variable">$port</span></span><span> <= </span><span><span class="hljs-number">65535</span></span><span>;
}
</span><span><span class="hljs-comment">// နမူနာ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_service_name_valid</span></span><span>(</span><span><span class="hljs-string">'http'</span></span><span>, </span><span><span class="hljs-string">'tcp'</span></span><span>)); </span><span><span class="hljs-comment">// ယေဘုယျအားဖြင့် true</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_service_name_valid</span></span><span>(</span><span><span class="hljs-string">'nosuchservice'</span></span><span>, </span><span><span class="hljs-string">'tcp'</span></span><span>)); </span><span><span class="hljs-comment">// false</span></span><span>
</span></span>Gallervbyname သည် operating system ၏ 0 န်ဆောင်မှုဒေတာဘေ့စ် (ဥပမာ / etc / 0 န်ဆောင်မှုများ ) ကိုမေးမြန်းသည်။ ကွဲပြားခြားနားသောစနစ်များ, ကွဲပြားခြားနားသောတပ်ဆင်မှုပတ် 0 န်းကျင်များနှင့်ကွဲပြားခြားနားသောဖြန့်ဖြူးမှုများတွင်ကွဲပြားခြားနားသော entries များကိုဆံ့နိုင်သည်။ ဥပမာအားဖြင့်အချို့သောဓလေ့ထုံးစံအချို့သည်အိမ်ရှင်တစ် ဦး နှင့်အခြားတစ်ခုပေါ်တွင်မတည်ရှိပါ။
ဤလုပ်ဆောင်ချက်သည် 0 န်ဆောင်မှုအမည်ရှိသည့် 0 န်ဆောင်မှုအမည်ရှိရှိ, မရှိဟု သာဖော်ပြထားသည်။ အကယ်. သင်သည် "0 န်ဆောင်မှုပေးနိုင်မှု" ကိုစစ်ဆေးရန်လိုအပ်ပါကကွန်ယက်ချိတ်ဆက်မှုစစ်ဆေးမှုများ ( fsocopen , stream_socket_clocket_cletient သို့မဟုတ် socket_create / socket_connect_connect ) ပြုလုပ်ရန်လိုအပ်သည်။
protocol သည် 'TCP' သို့မဟုတ် 'UDP' (UDP '(ကိစ္စတွင်မခံစားနိုင်သော) ဖြစ်ရမည်။ အခြားတန်ဖိုးများကိုမမှန်ကန်ကြောင်းထည့်သွင်းစဉ်းစားပါလိမ့်မည်။
0 န်ဆောင်မှုနာမည်တစ်ခု၏တည်ရှိမှုကိုဆုံးဖြတ်ခြင်းသည်ပထမခြေလှမ်းသာဖြစ်သည်။ ဝေးလံခေါင်သီသောအိမ်ရှင် (သို့မဟုတ် local ည့်သည်အိမ်ရှင်) သည်ထို 0 န်ဆောင်မှုဆိပ်ကမ်းတွင်ဆက်သွယ်မှုများကိုလက်ခံသည်ကိုစစ်ဆေးလိုပါက port ကိုရရန် GwerverbbyName ကို သင်ပထမဆုံး အသုံးပြု. ဆက်သွယ်မှုကိုတည်ဆောက်ရန်ကြိုးစားနိုင်သည်။
<span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/**
* ပထမ ဦး ဆုံးကိုသုံးပါ getservbyname 判断ဝန်ဆောင်မှုအမည်,Accessibility ကိုအတည်ပြုရန်ပစ်မှတ်အိမ်ရှင်ဆိပ်ကမ်းသို့ချိတ်ဆက်ရန်ကြိုးစားပါ
*
* </span></span><span><span class="hljs-doctag">@param</span></span><span> string $host ပစ်မှတ်အိမ်ရှင်(IP သို့မဟုတ် Host အမည်)
* </span><span><span class="hljs-doctag">@param</span></span><span> string $service ဝန်ဆောင်မှုအမည်称
* </span><span><span class="hljs-doctag">@param</span></span><span> string $protocol 'tcp' သို့မဟုတ် 'udp'(သာဒီမှာသာအကောင်အထည်ဖော်ခဲ့သည် tcp ဆက်သွယ်မှုရှာဖွေတွေ့ရှိမှု)
* </span><span><span class="hljs-doctag">@param</span></span><span> float $timeout စက်ဏန့်(ဥပမာအားဖြင့် 2.0)
* </span><span><span class="hljs-doctag">@return</span></span><span> bool true အဆိုပါ port ကိုတွေ့ရှိနိုင်ကြောင်းနှင့်ထူထောင်နိုင်ပါတယ်ကြောင်းဖော်ပြသည် TCP ဆက်,false အခြားနည်းအားဖြင့်
*/
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">is_service_reachable</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-keyword">string</span></span></span><span> </span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$protocol</span></span><span> = </span><span><span class="hljs-string">'tcp'</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-number">2.0</span></span><span>): </span><span><span class="hljs-title">bool</span></span><span>
{
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-variable">$protocol</span></span><span>) !== </span><span><span class="hljs-string">'tcp'</span></span><span>) {
</span><span><span class="hljs-comment">// လွယ်ကူစေ:ဒီမှာသာလုပ်ပါ TCP ဆက်သွယ်မှုထောက်လှမ်းရေး;UDP ပိုမိုရှုပ်ထွေးသောရှာဖွေတွေ့ရှိမှု(无ဆက်/အတည်ပြုချက်မရှိပါ)</span></span><span>
</span><span><span class="hljs-keyword">throw</span></span><span> </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-built_in">InvalidArgumentException</span></span><span>(</span><span><span class="hljs-string">'is_service_reachable လက်ရှိတွင်သာထောက်ပံ့ခဲ့သည် tcp စမ်းသပ်မှု'</span></span><span>);
}
</span><span><span class="hljs-variable">$port</span></span><span> = @</span><span><span class="hljs-title function_ invoke__">getservbyname</span></span><span>(</span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-variable">$protocol</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$port</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span> || !</span><span><span class="hljs-title function_ invoke__">is_int</span></span><span>(</span><span><span class="hljs-variable">$port</span></span><span>) || </span><span><span class="hljs-variable">$port</span></span><span> < </span><span><span class="hljs-number">1</span></span><span> || </span><span><span class="hljs-variable">$port</span></span><span> > </span><span><span class="hljs-number">65535</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-variable">$errno</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$errstr</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$fp</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">$fp</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">false</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$fp</span></span><span>);
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-literal">true</span></span><span>;
}
</span><span><span class="hljs-comment">// နမူနာ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">var_dump</span></span><span>(</span><span><span class="hljs-title function_ invoke__">is_service_reachable</span></span><span>(</span><span><span class="hljs-string">'127.0.0.1'</span></span><span>, </span><span><span class="hljs-string">'ssh'</span></span><span>, </span><span><span class="hljs-string">'tcp'</span></span><span>, </span><span><span class="hljs-number">1.5</span></span><span>)); </span><span><span class="hljs-comment">// ဒီစက် ssh အစေခံ是否可达</span></span><span>
</span></span>မှတ်စု: UDP ၏ "လက်လှမ်းမီမှု" ဆုံးဖြတ်ချက်သည်မလွယ်ကူပါ။ UDP ရှာဖွေတွေ့ရှိမှုအမှန်ပင်လိုအပ်ပါကလျှောက်လွှာတင်ထားသောယုတ္တိဗေဒကိုအကောင်အထည်ဖော်လျှင်သို့မဟုတ်အထူးကိရိယာများကိုသုံးပါ။
Configuration Verification : အသုံးပြုသူသည် 0 န်ဆောင်မှုအမည် (SMTP, IMAP ကဲ့သို့သော SMTP , IMAP) သို့ 0 င်ရောက်သောအခါ system မှနာမည်ကိုအသိအမှတ်ပြုခြင်းရှိမရှိစစ်ဆေးရန် Gwervervbyname ကို ပထမဆုံးအသုံးပြုပါ။ အကယ်. အသိအမှတ်မပြုပါကအသုံးပြုသူသည် port နံပါတ်ကိုအသုံးပြုရန်သို့မဟုတ်အခြား 0 န်ဆောင်မှုအမည်ကိုရွေးချယ်ရန်အချက်ပြနိုင်သည်။
သဟဇာတဖြစ်ခြင်း - စနစ်၏ 0 န်ဆောင်မှုဒေတာဘေ့စ်ပေါ်တွင်မထားပါနှင့် - Cross-platform platform ရှေ့ပြေးလိုအပ်သည့်အခါ ap-app mapping table ကိုထိန်းသိမ်းထားပါ။
ခွင့်ပြုချက်နှင့်လုံခြုံရေး - 0 င်ရောက်နိုင်မှုရှာဖွေတွေ့ရှိမှုအတွက် ports များကိုချိတ်ဆက်ရန်, ကွန်ယက်မူဝါဒများ, firewalls နှင့်နှုန်းအကန့်အသတ်များကိုဂရုပြုပါ။ လုံခြုံရေးနှိုးစက်များကိုရှောင်ရှားရန်သို့မဟုတ်အစပျိုးခြင်းမှရှောင်ရှားရန်အချိန်တိုအတွင်းအိမ်ရှင်အမြောက်အများကိုမကြာခဏမတွေ့ပါနှင့်။
အမှားကိုင်တွယ်ခြင်း - GainverbbyName သည် မှားယွင်းစွာ ပြန်ပို့နိုင်သည်။ ကျေးဇူးပြု. ပြန်လည်ပတ်မှုတန်ဖိုးကိုတိုက်ရိုက်အသုံးပြုမည့်အစား၎င်းကိုရှင်းလင်းစွာကိုင်တွယ်ပါ။
0 န်ဆောင်မှုအမည်တွင် local system service database တွင် port မြေပုံ ( သို့ ) 0 န်ဆောင်မှုအမည်ရှိသည့် port မြေပုံရှိ, မရှိကိုဆုံးဖြတ်ရန် Glavervbyname ($ 0 န်ဆောင်မှု, $ protocol) ကိုသုံးပါ။
တရားဝင်မှုကိုဆုံးဖြတ်သည့်အခါ Return Value အမျိုးအစားကိုစစ်ဆေးရန်နှင့် Port သည် 1-65535 အကွာအဝေးအတွင်းရှိဆိပ်ကမ်းကိုသေချာစေရန်အကောင်းဆုံးဖြစ်သည်။
ဤနည်းလမ်းသည် 0 န်ဆောင်မှုကိုရရှိနိုင်မည်ဟုမဆိုလိုပါ ။ ရရှိနိုင်မှုကိုလိုအပ်ပါကကွန်ယက်ချိတ်ဆက်မှုအဆင့်တွင်ထပ်မံရှာဖွေတွေ့ရှိပါက ( fsocckopen စသည်) ကိုထပ်မံရှာဖွေရန်လိုအပ်သည်။
ပလက်ဖောင်းကွဲပြားခြားနားမှုများကိုသတိပြုပါ။ ကွဲပြားခြားနားသောစနစ်များ၏ 0 န်ဆောင်မှုဒေတာဘေ့စ်စာရင်းသည်ကွဲပြားခြားနားသည်။ သင့်တွင် Cross-platform လိုအပ်ချက်များရှိပါက ကျေးဇူးပြု. falkback mapping လုပ်ရန်ပြင်ဆင်ပါသို့မဟုတ် port နံပါတ်ကိုပေးရန်အသုံးပြုသူကိုမေးပါ။