PHP socket ကိုပရိုဂရမ်ရေးဆွဲရာတွင်အမှားကိုင်တွယ်သည့်ယန္တရားသည်အစီအစဉ်၏ကြံ့ခိုင်မှုကိုသေချာစေရန်အရေးကြီးသောအစိတ်အပိုင်းဖြစ်သည်။ PHP သည် developer များရယူရန်နှင့် socket error များကိုရယူရန် socket_clear_error () နှင့် socket_last_error () socket_elect_error () () နှင့် socket_elect_error ()) ကိုထောက်ပံ့ပေးသည်။ သို့သော်ဤလုပ်ငန်းဆောင်တာနှစ်ခု၏ output သည်အဆင့်နိမ့်နေဆဲဖြစ်ပြီး developer များအတွက်ပြ problems နာများကိုလျင်မြန်စွာရှာဖွေရန်နှင့်ဖြေရှင်းရန်အတွက်အဆင်မပြေမှုများရှိနေသေးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်မှုနှစ်ခုကိုစိတ်ကြိုက်အမှားကုဒ်မြေပုံရေးဆွဲရေးယန္တရားတစ်ခုဖြင့်ပေါင်းစပ်ရန်မည်သို့ပေါင်းစပ်ရမည်ကိုလေ့လာလိမ့်မည်။
ဤလုပ်ဆောင်ချက်သည်လတ်တလော Socket လည်ပတ်မှု၏အမှားကုဒ်ကိုပြန်ပို့သည်။ Parameters ထဲမသွားဘဲနောက်ဆုံး socient error code ကိုသင်ရရှိနိုင်ပါသည်။ သို့မဟုတ်အရင်းအမြစ်အတွက်သက်ဆိုင်ရာအမှားများကိုရရှိရန်သတ်သတ်မှတ်မှတ် socket အရင်းအမြစ်တစ်ခုတွင်သင်ဖြတ်သွားနိုင်သည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'm66.net', 80);
$errCode = socket_last_error($socket);
echo "အမှားကုဒ်:$errCode\n";
အမှားကုဒ်၏စာသားဖော်ပြချက်ကိုရယူပါ။
echo socket_strerror($errCode);
ဤလုပ်ဆောင်မှုသည်လက်ရှိသို့မဟုတ်သတ်မှတ်ထားသော socient error error status ကိုထုတ်ဖော်ပြောဆိုရန်လက်ရှိအချိန်တွင်အရေးယူဆောင်ရွက်မှုအသစ်ကိုအကျိုးသက်ရောက်စေသောအမှားအယွင်းဟောင်းကိုရှောင်ရှားရန်လက်ရှိသို့မဟုတ်သတ်မှတ်ထားသော socket error status ကိုရှင်းလင်းနိုင်သည်။
socket_clear_error($socket);
socket_strerror () သည် အမှားအယွင်းများကိုသတင်းအချက်အလက်ပေးသော်လည်း၎င်း၏သတင်းအချက်အလက်သည်ယေဘုယျအားဖြင့်ယေဘူယျအားဖြင့်အင်္ဂလိပ်ဘာသာဖြင့် ပိုမို. များသောအားဖြင့်အင်္ဂလိပ်ဘာသာတွင် ပိုမို. ရှုပ်ထွေးပြီးရှုပ်ထွေးသောအခြေအနေများအတွက်မရှင်းလင်းသောအရာများ (ဥပမာထုတ်လုပ်မှု, ထို့ကြောင့် "စိတ်ကြိုက်အမှားကုဒ်မြေပုံရေးဆွဲခြင်းယန္တရား" ကိုမိတ်ဆက်ပေးခြင်းသည်အမှားပြုပြင်ခြင်း၏အရည်အသွေးတိုးတက်စေရန်သော့ချက်ဖြစ်သည်။
အပေါင်းအသင်းတစ်ခုမှတဆင့်ဘုံအမှားကုဒ်များကိုကျွန်ုပ်တို့မြေပုံဆွဲနိုင်သည်။ ဥပမာများမှာအောက်ပါအတိုင်းဖြစ်သည် -
$socketErrorMap = [
10061 => ['msg' => 'ချိတ်ဆက်မှုအားငြင်းဆန်သည်,Target Host သည်နားထောင်ခြင်းဝန်ဆောင်မှုမရှိပါ', 'level' => 'error'],
10060 => ['msg' => 'ဆက်သွယ်မှုအချိန်ကုန်,ဆာဗာသည်တုန့်ပြန်ခြင်းမရှိပါ', 'level' => 'warning'],
10054 => ['msg' => 'ဝေးလံခေါင်သီသောအိမ်ရှင်သည်ရှိပြီးသားဆက်သွယ်မှုကိုပိတ်ထားသည်', 'level' => 'error'],
// မြေပုံများထပ်ထည့်ပါ...
];
function handleSocketError($socket = null, $clear = true) {
$errCode = socket_last_error($socket);
global $socketErrorMap;
$defaultMsg = socket_strerror($errCode);
$mapped = $socketErrorMap[$errCode] ?? ['msg' => $defaultMsg, 'level' => 'notice'];
if ($clear) {
socket_clear_error($socket);
}
// logging မှတိုးချဲ့ခဲ့သည်、ခြွင်းချက်ပစ်ချစသည်တို့ကို
echo "[{$mapped['level']}] အမှားကုဒ်: $errCode - {$mapped['msg']}\n";
}
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
@socket_connect($socket, 'm66.net', 12345); // ဒီ port ကိုမော်နီတာအဘယ်သူမျှမရှိသည်ဟုယူဆ
handleSocketError($socket); // output ကိုပိုမိုဖော်ရွေအမှားမက်ဆေ့ခ်ျကို
socket_close($socket);
output ကိုဖြစ်လိမ့်မည်:
[error] အမှားကုဒ်: 10061 - ချိတ်ဆက်မှုအားငြင်းဆန်သည်,Target Host သည်နားထောင်ခြင်းဝန်ဆောင်မှုမရှိပါ
ဖွံ့ဖြိုးရေးပတ် 0 န်းကျင်နှင့်ထုတ်လုပ်မှုပတ် 0 န်းကျင်ခွဲခြင်း
logging systems နှင့်ပေါင်းစပ်အသုံးပြုပါ - သင် monolog ကဲ့သို့သောမော်နီတာစာကြည့်တိုက်များကိုသင်ဖိုင်များ, ဒေတာဘေ့စ်များသို့မဟုတ်စောင့်ကြည့်လေ့လာခြင်းစနစ်များကိုမှတ်တမ်းတင်ရန်မှတ်တမ်းတင်နိုင်သည်။
အလိုက်သင့်ပြောင်းလဲခြင်းမျိုးစုံကြင်နာမှုဆိုင်ရာပံ့ပိုးမှု - အမှားအယွင်းများကိုဘာသာစကားမျိုးစုံခွဲခြားထားသောပုံစံများသို့တိုးချဲ့နိုင်သည်။
Socket_Close_Error () နှင့် Socket_last_Error () သည်ထုံးစံအမှားမြေပုံရေးဆွဲရေးယန္တရားများနှင့်ပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ပိုမိုသန့်စင်သောအမှားများနှင့်တုန့်ပြန်မှုများကိုပိုမိုကောင်းမွန်စွာတိုးတက်အောင်ပြုလုပ်နိုင်ပြီး Socket application များ၏ထိန်းသိမ်းမှုနှင့်သုံးစွဲသူများအားအလွန်တိုးတက်အောင်လုပ်နိုင်သည်။ ဤချဉ်းကပ်နည်းသည်အမှား semantics ၏ဖတ်နိုင်မှုကိုပိုမိုကောင်းမွန်စေရုံသာမကနောက်ဆက်တွဲတိုးချဲ့မှုများအတွက်အခြေခံအုတ်မြစ် (ဥပမာ Retry Logging Logging စသဖြင့်) အုတ်မြစ်ချသည်။ ၎င်းသည် developer များအတွက်မြှင့်တင်ရန်အတွက်အကောင်းဆုံးအလေ့အကျင့်ဖြစ်သည်။