PHP 소켓을 프로그래밍 할 때 오류 처리 메커니즘은 프로그램의 견고성을 보장하는 데 중요한 부분입니다. PHP는 개발자가 소켓 오류를 얻고 처리 할 수 있도록 Socket_clear_error () 와 Socket_last_error () 의 두 가지 핵심 함수를 제공합니다. 그러나이 두 기능 자체의 출력은 여전히 상대적으로 낮은 수준이며 개발자가 문제를 신속하게 찾아서 해결할 수있는 불편 함이 여전히 남아 있습니다. 이 기사는이 두 기능을 사용자 정의 오류 코드 매핑 메커니즘과 결합하여보다 효율적이고 실용적인 오류 처리 솔루션을 구축하는 방법을 살펴 봅니다.
이 함수는 가장 최근 소켓 작동의 오류 코드를 반환합니다. 매개 변수를 전달하지 않고 마지막 소켓 오류 코드를 얻거나 특정 소켓 리소스를 전달하여 리소스의 해당 오류를 얻을 수 있습니다.
$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);
이 기능은 이전 또는 지정된 소켓 오류 상태를 지우기 위해 새로운 작업 라운드의 판단에 영향을 미치는 이전 오류 코드를 피할 수 있습니다.
socket_clear_error($socket);
Socket_strerror ()는 오류 설명 정보를 제공하지만 정보는 일반적으로 더 일반적이며 대부분 영어로 이루어지며 복잡한 시나리오 (예 : 다국어 출력, 오류 레벨 분류, 개발 및 디버깅과 생산 로그)에 대해 충분히 명확하지 않습니다. 따라서 "사용자 정의 오류 코드 매핑 메커니즘"세트를 도입하는 것이 오류 처리 품질을 향상시키는 핵심입니다.
연관 배열을 통해 공통 오류 코드를 매핑 할 수 있습니다. 예는 다음과 같습니다.
$socketErrorMap = [
10061 => ['msg' => '연결이 거부되었습니다,대상 호스트에는 청취 서비스가 없습니다', '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);
}
// 로깅으로 확장되었습니다、예외 던지기 등
echo "[{$mapped['level']}] 오류 코드: $errCode - {$mapped['msg']}\n";
}
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
@socket_connect($socket, 'm66.net', 12345); // 이 포트에 모니터가 없다고 가정하십시오
handleSocketError($socket); // 보다 친숙한 오류 메시지를 출력합니다
socket_close($socket);
출력은 다음과 같습니다.
[error] 오류 코드: 10061 - 연결이 거부되었습니다,대상 호스트에는 청취 서비스가 없습니다
개발 환경 및 생산 환경의 분리 : 개발 단계에서 상세한 오류 정보가 출력 될 수 있으며 생산 환경은 표준 로그 형식으로 통합 될 수 있습니다.
로깅 시스템과 함께 사용 : 독백과 같은 로그 라이브러리를 사용하여 오류 정보를 파일, 데이터베이스 또는 모니터링 시스템에 기록 할 수 있습니다.
적응 형 다국어 지원 : 오류 설명 정보는 다국어 형식으로 확장되어 시스템의 국제화 기능을 향상시킬 수 있습니다.
Socket_clear_Error () 및 Socket_last_error () 를 통해 사용자 지정 오류 매핑 메커니즘과 결합하여보다 세련된 오류 인식 및 응답을 달성하여 소켓 애플리케이션의 유지 관리 및 사용자 친화 성을 크게 향상시킬 수 있습니다. 이 접근법은 오류 의미의 가독성을 향상시킬뿐만 아니라 후속 확장 (예 : 자동 재 시도, 미세 조정 로깅 등)의 토대를 마련합니다. 이것은 개발자에게 홍보 할 가치가있는 모범 사례입니다.