Socket-based ပရိုဂရမ်အတွက် PHP ကိုအသုံးပြုသည့်အခါ PHP ကိုအသုံးပြုသောအခါဖောက်သည်များ၏ဆက်သွယ်မှုများကိုလက်ခံသည့်သော့ချက်ဖြစ်သည်။ သို့သော် function ခေါ်ဆိုမှုမအောင်မြင်ပါကအမှားတစ်ခုကိုပစ်ချခြင်း, ထို့ကြောင့်, ဤအမှားများကိုဖမ်းခြင်းနှင့်၎င်းတို့အားမှတ်တမ်းတွင်မှတ်တမ်းတင်ခြင်းများကိုမှတ်တမ်းတင်ခြင်းနှင့်ပြုပြင်ခြင်းနှင့်ပြုပြင်ထိန်းသိမ်းခြင်းအတွက်အလွန်လိုအပ်သည်။
ဤဆောင်းပါးသည် socket_acception ၏အမှားများကိုမည်သို့ပြုလုပ်နိုင်ပြီး log file ထဲသို့ 0 င်ရောက်ရန်မည်သို့အသေးစိတ်ဖော်ပြထားသည်။
ဤတွင်အခြေခံ Socket Server ဥပမာတစ်ခုမှာ -
<?php
$host = '0.0.0.0';
$port = 8080;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
error_log("socket_create() failed: " . socket_strerror(socket_last_error()) . "\n", 3, "/var/log/php_socket_error.log");
exit;
}
if (!socket_bind($socket, $host, $port)) {
error_log("socket_bind() failed: " . socket_strerror(socket_last_error($socket)) . "\n", 3, "/var/log/php_socket_error.log");
exit;
}
if (!socket_listen($socket, 5)) {
error_log("socket_listen() failed: " . socket_strerror(socket_last_error($socket)) . "\n", 3, "/var/log/php_socket_error.log");
exit;
}
Socket_Accept () သည် ပျက်ကွက်မှုအပေါ် မှားယွင်းစွာ တုံ့ပြန်လိမ့်မည်။ အမှားကုဒ်ကိုဖမ်းရန်နှင့်မှတ်တမ်းကို log ပြုလုပ်ရန်အောက်ပါအတိုင်း၎င်းကိုသင်ကိုင်တွယ်နိုင်သည် -
while (true) {
$clientSocket = @socket_accept($socket);
if ($clientSocket === false) {
$errCode = socket_last_error($socket);
$errMsg = socket_strerror($errCode);
error_log("socket_accept() failed with error [$errCode]: $errMsg\n", 3, "/var/log/php_socket_error.log");
// သင်လိုအပ်သလိုကွင်းဆက်ကိုဆက်လုပ်ရန်သို့မဟုတ်ရပ်ဆိုင်းရန်ရွေးချယ်နိုင်သည်
continue;
}
// ဆက်သွယ်မှုကိုလက်ခံရရှိပြီးနောက်ယုတ္တိဗေဒထုတ်ယူခြင်း
$msg = "Hello from server on http://m66.net\n";
socket_write($clientSocket, $msg, strlen($msg));
socket_close($clientSocket);
}
ဒီကုဒ်ထဲမှာ:
@ operator သည် socket_accept မှပစ်ချသည့်ပုံသေသတိပေးချက်ကိုဖိနှိပ်ရန်အသုံးပြုသည်။
Socket_last_Error () သည် နောက်ဆုံး socket လည်ပတ်မှု၏အမှားကုဒ်ကိုရရှိသည်။
Socket_Stror () အမှားကုဒ်ကိုလူတို့၏ဖတ်နိုင်သောကြိုးများအဖြစ်ပြောင်းလဲခြင်း,
error_log () သည် /var/log/php_php_socket_error.log file သို့အမှားများကိုရေးသည်။
မှတ်စု: Log file လမ်းကြောင်းသို့စာရေးရန်ခွင့်ပြုချက်ရှိကြောင်းနှင့်မှတ်တမ်းဖိုင်၏မိဘလမ်းညွှန်တည်ရှိကြောင်းသေချာပါစေ။
Error log ကို function မြှင့်တင်ခြင်းနှင့်ပေါင်းစည်းသည့် format output အတွက် function ကိုဖွင့်နိုင်သည်။
function log_socket_error($socket, $context = '') {
$errCode = socket_last_error($socket);
$errMsg = socket_strerror($errCode);
$timestamp = date('Y-m-d H:i:s');
$logEntry = "[$timestamp] [$context] Error [$errCode]: $errMsg\n";
error_log($logEntry, 3, "/var/log/php_socket_error.log");
}
အသုံးပြုနည်းကိုအောက်ပါအတိုင်းဖြစ်သည် -
$clientSocket = @socket_accept($socket);
if ($clientSocket === false) {
log_socket_error($socket, 'socket_accept');
continue;
}
အထက်ပါနည်းလမ်းအားဖြင့် Socket_Acception အတွက်အခက်အခဲများကိုရှောင်ရှားရန် Socket_Accept () ကိုရှောင်ရှားရန် socket_accept () ကို အသုံးပြုသောအခါအမှားအယွင်းများကိုထိထိရောက်ရောက်ဖမ်းယူနိုင်သည်။ တစ်ချိန်တည်းမှာပင်ဖိုင်များသို့မှတ်တမ်းများသည်နောက်ဆက်တွဲလည်ပတ်မှုနှင့်ပြုပြင်ထိန်းသိမ်းမှုစစ်ဆေးခြင်းနှင့်အလိုအလျောက်စောင့်ကြည့်လေ့လာခြင်းစနစ်များကိုပေါင်းစပ်ခြင်းများလွယ်ကူချောမွေ့စေသည်။ အမှန်တကယ်ထုတ်လုပ်မှုပတ် 0 န်းကျင်များတွင်လည်းအလားတူဆန်းသို့မဟုတ်အခြားဗဟိုပြုစနစ်များကိုထပ်မံဖြည့်ဆည်းနိုင်အောင်ပိုမိုကောင်းမွန်အောင်ပြုလုပ်ရန်လည်းအကြံပြုသည်။