PHP에서 getServbyName () 함수는 서비스 이름 (예 : HTTP )을 기반으로 서비스의 해당 포트 번호를 얻는 데 사용됩니다. 서비스가 사용하는 포트 번호를 나타내는 정수를 반환합니다. 서비스 이름이 유효하지 않거나 등록되지 않은 경우 함수는 널 값을 반환합니다. GetServbyName () 가 널 값을 반환하면 일반적으로 쿼리의 서비스 이름에 문제가 있음을 의미합니다. 이 기사는 문제를 찾고 해결하는 데 도움이되는 일반적인 원인과 해당 솔루션을 소개합니다.
가장 일반적인 이유 중 하나는 getServbyName () 함수에 전달 된 서비스 이름의 철자가 틀린 것입니다. 예를 들어, HTTP 서비스의 포트를 얻으려고 할 때 HTTP 또는 HTTPS 로 잘못 작성 될 수 있습니다 (프로토콜 오류 일 수도 있지만 오타 일 수도 있습니다).
통과 한 서비스 이름이 정확히 정확하고 /etc /services 파일에 나열된 서비스 이름과 일치하는지 확인하십시오.
/etc /services 파일을 확인하여 서비스 이름이 올바른지 확인할 수 있습니다. 이 파일은 대부분의 Linux 시스템에 존재하며 공통 서비스 및 해당 포트 번호가 포함되어 있습니다.
GetServbyName ()는 시스템의 /etc /services 파일에 의존하여 서비스 이름과 포트 번호를 쿼리합니다. 파일이 존재하지 않거나 손상된 경우 함수는 결과를 올바르게 반환 할 수 없습니다.
/etc /services 파일이 존재하고 손상되지 않았는지 확인하십시오. 파일이 손실되거나 액세스 할 수없는 경우 복구해야합니다. 관련 운영 체제 구성 요소를 다시 설치하여 고정 할 수 있습니다.
관리자 인 경우 파일 권한이 올바르게 설정되어 있는지 확인하면 PHP 스크립트가 파일에 액세스 할 수 있습니다.
GetServbyName () 의 쿼리는 서비스 가 /etc /services 파일에 등록되어 있는지 여부에 따라 다릅니다. 서비스가 시스템 서비스 목록에 등록되지 않은 경우 기능은 유효한 결과를 반환 할 수 없습니다.
쿼리하려고하는 서비스가 /etc /services 에 나열되지 않은 경우 서비스 및 포트 번호를 수동으로 추가하십시오.
예를 들어, /etc /services 파일을 열고 다음과 같은 것을 추가하십시오.
<span><span>customservice 12345/tcp
</span></span>
이런 식으로 Customservice 라는 서비스는 포트 12345 로 등록됩니다.
GetServbyName ()은 서비스 이름과 프로토콜 유형의 두 매개 변수로 전달해야합니다. 프로토콜 유형은 일반적으로 TCP 또는 UDP 입니다. 프로토콜 유형이 유효하지 않으면 함수는 널 값도 반환합니다.
프로토콜 유형이 정확하고 서비스가 쿼리되는 것과 호환되는지 확인하십시오. 일반적인 프로토콜 유형에는 TCP 및 UDP가 포함됩니다. 확실하지 않은 경우 문서를 참조하거나 시스템 구성을 볼 수 있습니다.
때로는 PHP의 구성 문제로 인해 GetServbyName () 이 /etc /services 파일을 올바르게 읽지 못할 수 있습니다. 예를 들어, PHP 구성에 GetServbyName () 함수가 비활성화되었거나 시스템 환경에서 예외가있을 수 있습니다.
php.ini 구성 파일을 확인하여 관련 네트워크 기능 (예 : GetServbyName () )이 비활성화되어 있는지 확인하십시오.
PHP가있는 환경이 시스템의 네트워크 구성 파일에 액세스 할 수 있는지 확인하십시오.
phpinfo () 함수를 사용하여 PHP 환경이 관련 확장을 정상적으로로드하는지 확인하십시오.
PHP가 일부 특수 네트워크 환경 (컨테이너화 된 환경, 가상 머신 및 제한된 네트워크 액세스 환경)에서 실행되는 경우 GetServbyName ()가 시스템의 서비스 목록에 정상적으로 액세스하지 못한 다음 널 값을 반환 할 수 없습니다.
제한된 환경에서는 포트 번호를 수동으로 구성하는 것과 같은 다른 방식으로 서비스의 포트 번호를 얻거나 다른 방법을 사용하여 서비스 정보를 쿼리하십시오.
getAddrinfo ()를 사용하거나 알려진 포트 번호를 직접 쿼리하는 등 GetServbyName () 대신 포트를 직접 쿼리하려고 시도 할 수도 있습니다.
getServbyName () 함수가 문제를 해결할 수없는 경우 다른 PHP 함수 사용을 고려하거나 알려진 포트 번호를 직접 쿼리 할 수 있습니다. 예를 들어, getAddrinfo ()는 호스트 주소 및 포트 정보를 얻는 데 적합한보다 일반적인 기능입니다.
getAddrinfo () 또는 GetServbyName () 대신 기타 네트워크 관련 함수 사용, 특히 /etc /services 에 액세스 할 수없는 경우 고려하십시오.
GetservbyName ()가 빈 값을 반환 할 때 일반적인 이유에는 철자 오류, 시스템 구성 문제 또는 서비스 등록 누락이 포함됩니다. 위의 진단 단계 및 솔루션을 통해 문제를 효과적으로 문제 해결하고 해결할 수 있습니다. 항상 서비스 이름과 프로토콜 유형의 정확성을 확인하고 시스템 구성 파일의 무결성을 확인하여 기능이 정상적으로 작동 할 수 있는지 확인하십시오.