PHP Network Programming တွင် Socket_set_Set_option သည်အလွန်အရေးကြီးသောလုပ်ဆောင်ချက်ဖြစ်သည်။ ၎င်းသည်အချိန်ကုန်ခြင်း, ကြားခံအရွယ်အစား, ပိတ်ဆို့ခြင်း mode စသည့်အခြေခံအပြုအမူများကိုထိန်းချုပ်ရန် Socket Options များကိုထိန်းချုပ်ရန် socket options များကိုသတ်မှတ်ရန်အသုံးပြုသည်။ ဤဆောင်းပါးသည်ဤသာမန်အမှားများကိုအသေးစိတ်မိတ်ဆက်ပေးပြီးလက်တွေ့ကျသောပြ troubl နာဖြေရှင်းခြင်းနှင့်ပြန်လည်ပြုပြင်ခြင်းတို့ပါ 0 င်သည်။
ပြနာဖော်ပြချက်:
Socket_set_option ၏ပထမဆုံး pareter သည်မှန်ကန်သော socket အရင်းအမြစ်ဖြစ်ရမည်။ အကယ်. အရင်းအမြစ်မဟုတ်သောအမျိုးအစား (ဥပမာ - boolean မှားယွင်းသောသို့မဟုတ် string တစ်ခုကဲ့သို့) လျှင် function call သည်ကျရှုံးလိမ့်မည်။
အမှားဥပမာ -
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
echo "Socket create failed.\n";
}
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1); // $socket ဖြစ်နိုင်စရာ false
fix နည်းလမ်း:
သေချာစွာ socket_createe ခိုင်လုံသောအရင်းအမြစ်ကိုအောင်မြင်စွာပြန်ပို့ပြီးအမှားစစ်ဆေးခြင်းကိုအောင်မြင်စွာစစ်ဆေးပါ။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Socket creation failed: " . socket_strerror(socket_last_error()));
}
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
ပြနာဖော်ပြချက်:
ရွေးချယ်စရာများကိုချိန်ညှိသောအခါဒုတိယနှင့်တတိယ parameters များသည်များသောအားဖြင့် ( sol_socket , so so_reuseaddr စသည်) ဖြစ်သည်။ input error တစ်ခုသို့မဟုတ် MissPelling သည် function ကိုရွေးချယ်စရာများကိုအသိအမှတ်မပြုရန်ဖြစ်စေလိမ့်မည်။
အမှားဥပမာ -
socket_set_option($socket, SOL_SOCKT, SO_REUSEADDR, 1); // စာလုံးပေါင်းအမှား
fix နည်းလမ်း:
PHP တွင်ပါ 0 င်သောစဉ်ဆက်မပြတ်ပါ 0 င်သော PHP ကို အသုံးပြု. လျင်မြန်စွာတည်နေရာအတွက်အမှားအယွင်းများကိုဖွင့်ပါ။
error_reporting(E_ALL);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
ပြနာဖော်ပြချက်:
အချို့သော operating systems များသည်အချို့သော Linux Systems သည် So_RCVTOOO setting ကိုအနှုတ်လက္ခဏာများကိုမထောက်ပံ့ပါ။ သို့မဟုတ်အချို့သော TCP layer options များကိုမထောက်ပံ့ပါ။
fix နည်းလမ်း:
Society Socket Support စာရွက်စာတမ်းများသို့မဟုတ်လူလက်စွဲကိုစစ်ဆေးပါ။
option ကိုထိရောက်ကြောင်းအတည်ပြုရန် Socket_et_option ကို သုံးပါ။
အချိန်ကုန်ချိန်ညှိချက်များအရမီလီစက္ကန့်တန်ဖိုးကိုအတိအလင်းဖော်ပြရန်အကြံပြုသည်။
$timeout = ['sec' => 5, 'usec' => 0];
socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout);
ပြနာဖော်ပြချက်:
အချို့သော socket options များသည်ထုတ်လွှင့်ခွင့်ပြုချက်ကိုပြုပြင်ရန်နှင့်ကန့်သတ်ထားသော ports များကို binding ports များကိုဖြည့်ဆည်းရန်ကြိုးစားသည့်အခါအုပ်ချုပ်ရေးမှူးခွင့်ပြုချက်လိုအပ်သည်။
fix နည်းလမ်း:
PHP အစီအစဉ်များကိုခွင့်ပြုချက်အလုံအလောက်ရှိသောအသုံးပြုသူတစ် ဦး အနေဖြင့်အသုံးပြုပါသို့မဟုတ်အခွင့်ထူးခံဆိပ်ကမ်းများအသုံးပြုခြင်းကိုရှောင်ကြဉ်ပါ။
socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
ခွင့်ပြုချက်အမှားတစ်ခုရှိပါကအသေးစိတ်အချက်အလက်များရရန် society_last_error () ကို အသုံးပြု. societ_last_Error () ကို ကြည့်ရှုနိုင်သည်။
အမှားအယွင်း - အမှားအယွင်း:
error_reporting(E_ALL);
ini_set('display_errors', 1);
အသေးစိတ်ကိုရယူရန် Socket_last_Error နှင့် Socket_Strent ကို သုံးပါ။
if (!socket_set_option($socket, SOL_SOCKET, SO_RCVBUF, 1024)) {
echo "Error: " . socket_strerror(socket_last_error($socket));
}
အဆင့်ဆင့်စစ်ဆေးမှုဖြင့်အဆင့်
configuration ကိုအဆင့်အမျိုးမျိုးသို့ ခွဲ. တစ်ခုဖြင့်စစ်ဆေးပါ။
$result1 = socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
$result2 = socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, ['sec' => 2, 'usec' => 0]);
စနစ်မှတ်တမ်းကိုကြည့်ပါ။
Linux Systems တွင်ရှိပါကသက်ဆိုင်ရာမှတ်တမ်းများကိုကြည့်ရှုရန်အောက်ပါ command ကိုသုံးနိုင်သည်။
dmesg | grep socket
PHP Socket Server ကိုဖြန့်ချထားသည့်အခါအသုံးပြုသူသည် "လိပ်စာကိုမပြန်နိုင်" သောအမှားတစ်ခုကိုဖွင့်သည် ။
အမှားကုဒ်:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, '0.0.0.0', 8080); // အမှားတစ်ခုသတင်းပို့ပါ Address already in use
Fix: ၎င်းကိုကြိုတင်သတ်မှတ်ရန် So_reuseaddr ကို သုံးပါ။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, '0.0.0.0', 8080);
ဤကဲ့သို့သောကိစ္စရပ်များအတွက် Https://gitbox.net/docs/php-socket-socketsockets