လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_set_Stock_block ကို PHP ဗားရှင်းနှင့်လိုက်ဖက်တဲ့ပြ issues နာများ

Socket_set_Stock_block ကို PHP ဗားရှင်းနှင့်လိုက်ဖက်တဲ့ပြ issues နာများ

gitbox 2025-05-26

PHP Network Programming တွင် Socket_set_set_sck () function ကို socket to mode ကို socket to mode ကိုသတ်မှတ်ရန်အသုံးပြုသည်။ သို့သော် PHP ဗားရှင်း၏အသစ်ပြောင်းခြင်းနှင့်အတူဤလုပ်ဆောင်မှု၏အပြုအမူနှင့်ထောက်ခံမှုသည်နည်းနည်းပြောင်းလဲသွားပြီး developer များနှင့်လိုက်လျောညီထွေဖြစ်အောင်စိန်ခေါ်မှုများကိုဖြစ်ပေါ်စေသည်။ ဤဆောင်းပါးသည် socket_set_set_block () ကွဲပြားခြားနားသော PHP ဗားရှင်းများတွင်ကွဲပြားခြားနားသော PHP ဗားရှင်းများတွင်အသေးစိတ်ခွဲခြမ်းစိတ်ဖြာလိမ့်မည်။

1 ။ socket_set_sc.block () function ကိုမိတ်ဆက်ပါ

Socket_set_block () သည် PHP ၏ Sockets Extension မှပေးသော function တစ်ခုဖြစ်သည်။ Blocking Mode ဆိုသည်မှာဒေတာများကိုဖတ်ရှုခြင်းသို့မဟုတ်ရေးသားသည့်အခါ,

function ကိုအဓိပ္ပါယ်ပုံဥပမာ:

 bool socket_set_block(resource $socket)

အောင်မြင်မှုအပေါ် စစ်မှန်တဲ့ အောင်မြင်မှုနှင့်ပျက်ကွက်အပေါ် မှားယွင်းသော အပေါ်ပြန်လည်ရောက်ရှိ။

2 ။ လိုက်ဖက်တဲ့ပြ issues နာတွေကိုခွဲခြမ်းစိတ်ဖြာခြင်း

1 ။ PHP 5.x ဗားရှင်း

PHP 5.x ဗားရှင်းတွင် socket_set_set_block () function ကိုတည်ရှိပြီးပုံမှန်လုပ်ဆောင်ချက်များရှိသည်။ ပိတ်ဆို့ခြင်းအခြေအနေကိုရိုက်ထည့်ရန် Socket ကိုတိုက်ရိုက်ခေါ်ဆိုနိုင်သည်။

နမူနာကုဒ်:

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);
socket_set_block($socket);
// နောက်ဆက်တွဲဖတ်ရန်သို့မဟုတ်စစ်ဆင်ရေးရေးရန်
?>

2 ။ PHP 7.x နှင့်နောက်ပိုင်းတွင်

PHP 7 မှစတင်. တရားဝင်စာရွက်စာတမ်းများသည် Socket_set_set_Stock () သည် အချို့သောစနစ်များသို့မဟုတ် PHP ဗားရှင်းများအပေါ်ကိုက်ညီမှုမရှိသောကြောင့်အခြားစာရွက်စာတမ်းများကိုအကြံပြုသည်။ တရားဝင်ပိတ်ဆို့ခြင်း (သို့) ပိတ်ဆို့ခြင်းမပြုရန် Socket_set_Set_option () ကို အသုံးပြုသည်။

ဥပမာအားဖြင့်, ပိတ်ဆို့ခြင်း mode ကိုအောက်ပါနည်းလမ်းများဖြင့်အကောင်အထည်ဖော်နိုင်ပါသည်:

 socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>0, 'usec'=>0]);

သို့မဟုတ် local_set_set_nonblock () ကိုယုတ္တိစာဖြင့်ပေါင်းစပ်ရန်တိုက်ရိုက်အသုံးပြုပါ။

မှတ်ချက် - တရားဝင် PHP စာရွက်စာတမ်းများသည် socket_set_set_block () အချို့ဗားရှင်း 7.x တွင်ကန့်သတ်ထားသည်။

3 ။ ကွဲပြားခြားနားသော operating systems

  • Windows ပတ်ဝန်းကျင်သည် Socket_set_scoCk () ကို အတော်လေးကောင်းကောင်းထောက်ပံ့သည်။

  • Linux နှင့် MacoS တွင်အထူးသဖြင့် PHP ဗားရှင်းအသစ်များအတွက် Socket_set_set_option () ကို အသုံးပြုရန်အကြံပြုသည်။

3 ။ ဒီဗားရှင်းတွေအကြားကွာခြားချက်များကိုဘယ်လိုဖြေရှင်းမလဲ။

ဖြေရှင်းချက် 1 - ဗားရှင်းတရားစီရင်ချက် + သမ်းအနားကုဒ်

PHP ဗားရှင်းကိုစစ်ဆေးခြင်းနှင့် Socket_set_sblock () function ကိုထောက်ပံ့ခြင်းရှိမရှိနှင့်သက်ဆိုင်သောနည်းလမ်းကိုရွေးချယ်ပါ။

 <?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);

if (function_exists('socket_set_block')) {
    socket_set_block($socket);
} else {
    // အသုံးပြု socket_set_option ပိတ်ဆို့ခြင်းတုပရန်
    socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec'=>0, 'usec'=>0]);
    socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, ['sec'=>0, 'usec'=>0]);
}
?>

Solution 2: ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုသုံးပါ

မျက်မှောက်ခေတ်ပိတ်ဆို့ခြင်းမဟုတ်သော sockets များကိုအသုံးပြုရန်ခေတ်မီပြတ်သားသောသို့မဟုတ်ဖြစ်ရပ်မောင်းနှင်သည့်ပရိုဂရမ်များကို ရွေးချယ်ရန် အကြံပြုသည်။

 <?php
socket_set_nonblock($socket);
// အသုံးပြု socket_select ဖြစ်ရပ်နားထောင်ခြင်းနှင့်ဒေတာဖတ်ရှုခြင်းလုပ်ဆောင်ပါ
$read = [$socket];
$write = $except = null;
if (socket_select($read, $write, $except, 0, 200000)) {
    $data = socket_read($socket, 2048);
    // အချက်အလက်များကိုထုတ်ယူခြင်း
}
?>

ဤဖြေရှင်းချက်သည်ဗားရှင်းများစွာနှင့်ပိုမိုသဟဇာတဖြစ်ပြီးအစီအစဉ်ပြောင်းလွယ်ပြင်လွယ်တိုးတက်လာသည်။

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

  • Socket_set_block () ကို PHP 5.x တွင်ပိုမိုကောင်းမွန်သောပံ့ပိုးမှုဖြစ်သော်လည်း PHP 7.x နှင့်နောက်ပိုင်းဗားရှင်းများတွင်၎င်းကိုသတိပြုရန်အကြံပြုသည်။

  • PHP ဗားရှင်းနှင့်ပတ်ဝန်းကျင်နှင့်အညီအစားထိုးရန် Socket_set_set_option () သို့မဟုတ်ပိတ်ဆို့ခြင်း + ဖြစ်ရပ် loop method ကိုအသုံးပြုရန်အကြံပြုသည်။

  • Cross-version practry programs များကိုရေးသည့်အခါ, မတည်ရှိနိုင်သည့်လုပ်ဆောင်မှုများကိုတိုက်ရိုက်ခေါ်ဆိုမှုများကိုရှောင်ရှားရန်ဗားရှင်းတရားစီရင်ခြင်းနှင့်စစ်ဆေးခြင်းကိုထည့်ရန်အကောင်းဆုံးဖြစ်သည်။

အထက်ပါနည်းလမ်းများမှတစ်ဆင့် Socket_set_set_Stock () function ၏သဟဇာတဖြစ်သော Socket_set_Sblock () function ကိုထိရောက်စွာကိုင်တွယ်ဖြေရှင်းနိုင်ခြင်းနှင့်ထိရောက်စွာကိုင်တွယ်နိုင်ပြီးကွန်ယက်ပရိုဂရမ်ကိုတည်ငြိမ်စွာပြေးရန်သေချာစေရန်သေချာစေနိုင်သည်။