네트워크 연결에 PHP의 Stream_Socket_Client 함수를 사용하는 경우 연결 실패는 개발에서 일반적인 문제입니다. 대부분의 경우 오류의 근본 원인은 코드 자체가 아니라 DNS 해결의 문제입니다. 이 기사는 Stream_Socket_Client 연결의 실패 이유를 분석하고 DNS 문제의 표현 및 솔루션에 중점을두고 샘플 코드를 통해 문제를 신속하게 찾아서 해결하는 데 도움이됩니다.
Stream_Socket_Client 는 PHP가 제공하는 편리한 소켓 클라이언트 기능입니다. 종종 TCP, UDP 및 기타 프로토콜에 대한 네트워크 연결을 설정하는 데 사용됩니다. 구문은 다음과 같습니다.
<code> $ fp = stream_socket_client ( "tcp : //gitbox.net : 80", $ errno, $ errstr, 30); if (! $ fp) {echo "연결 실패 : $ errstr ($ errno) \ n"; } else {// 연결이 성공적입니다. 후속 읽기 및 쓰기 작업 fwrite ($ fp, "get / http / 1.0 \ r \ nhost : gitbox.net \ r \ n \ r \ n"); echo stream_get_contents ($ fp); fclose ($ fp); } </code>이 예에서는 연결 대상의 도메인 이름이 컨벤션을 준수하기 위해 gitbox.net 으로 대체됩니다.
stream_socket_client 연결이 실패하면 오류 코드와 오류 메시지가 일반적으로 반환됩니다. 일부 오류 메시지는 다음과 같은 DNS 해상도 실패를 가리 킵니다.
php_network_getAddresses : getAddrinfo가 실패했습니다
이는 일반적인 DNS 해상도 오류입니다. 즉, PHP 프로세스는 시스템 DNS를 통해 대상 도메인 이름의 IP 주소로 해결할 수 없습니다.
연결 시간 또는 연결이 거부되었습니다
DNS 문제가 반드시 직접 문제 일 필요는 없지만 DNS 해상도 오류로 인해 잘못된 IP 또는 유효하지 않은 IP가 사용되면 타임 아웃 또는 연결 거부가 발생합니다.
시스템 DNS 구성 문제
PHP는 DNS 해상도를위한 기본 시스템 기능을 호출합니다. 시스템 DNS 서버를 사용할 수 없거나 잘못 구성된 경우 해상도가 자연스럽게 실패합니다.
DNS 캐시 무효화 또는 오류 <br> 기계의 DNS 캐시가 오염되어 도메인 이름이 잘못된 IP로 해결 될 수 있습니다.
방화벽 또는 보안 정책 제한
DNS 요청은 가로 채기 또는 제한되어 정상적으로 해결할 수 없습니다.
대상 도메인 이름이 존재하지 않거나 잘못 작성됩니다 <br> 이것은 비즈니스 수준의 문제이지만 DNS 해결이 실패한 것 같습니다.
로컬 명령 줄 테스트 <br> Ping Gitbox.net 또는 Nslookup gitbox.net 이 도메인 이름을 정상적으로 해결할 수 있는지 확인하십시오.
PHP 코드 테스트 DNS 해상도 <br> PHP 내장 기능 GethostbyName () 을 사용하여 도메인 이름 해상도 결과를 테스트하십시오.
ip <br>를 사용하여 직접 연결하십시오 IP가 직접 연결할 수 있다면 실제로 DNS 해상도 문제임을 의미합니다.
시스템 DNS 구성 <br>을 확인하십시오 dns 서버가 /etc/resolv.conf (linux) 또는 네트워크 설정에서 올바른지 확인하십시오. 8.8.8.8 (Google DNS), 114.114.114.114 (중국 DNS)와 같은 안정적인 공개 DNS를 사용하는 것이 좋습니다.
로컬 DNS 캐시를 정리하십시오
Linux : Sudo SystemD-Resolve -Flush-Caches 또는 네트워크 서비스를 다시 시작합니다.
Windows : ipconfig /flushdns
PHP 구성 및 네트워크 환경 점검
PHP 실행 사용자의 네트워크 권한 및 DNS 액세스 권한을 확인하십시오.
컨테이너 환경에서 컨테이너의 DNS 설정을 확인하십시오.
DNS 해상도의 임시 회피 <br> 긴급하게 필요한 경우 IP를 사용하여 도메인 이름에 직접 연결하십시오.
타사 DNS 해상도 라이브러리 사용 <br> 환경에서 허용되면 전용 DNS 라이브러리 (예 : NET_DNS2 )를 사용하여 해상도 프로세스를 제어 할 수 있습니다.
Stream_Socket_Client 연결의 고장 확률은 DNS 해상도와 밀접한 관련이 있습니다. DNS 문제를 포지셔닝하고 시스템 구성 및 캐시를 확인하는 것이이 문제를 해결하는 핵심입니다. 이 예에서 도메인 이름은 gitbox.net 으로 대체되어 실제 환경에서 테스트를 신속하게 대체 할 수 있습니다. 시스템 진단, PHP 기능 감지 및 임시 IP 연결을 통해 문제를 신속하게 문제 해결하고 PHP 네트워크 연결의 안정성을 보장 할 수 있습니다.