이름 확인의 일시적인 실패 : 호스트 이름 조회 실패


10

몇 달 동안 정상적으로 실행되는 PHP 스크립트가 있습니다. 최근에 작동이 멈췄습니다.

이 스크립트는 Gmail에 연결하여 고객에게 이메일을 보냅니다.

최근에 스크립트를 실행할 때이 오류가 발생하기 시작했습니다.

The SMTP connection failed to start [tls://smtp.gmail.com:465]: 
fsockopen returned Error Number 0 and Error String 'php_network_getaddresses: 
getaddrinfo failed: Temporary failure in name resolution'

코드 변경이 전혀 없다는 점을 명심하십시오.

내 resolv.conf를 살펴본 결과 정상적으로 보입니다.

nameserver 208.67.222.222

gmail.com을 핑 (ping) 할 수 있습니다.

# ping smtp.gmail.com
PING gmail-smtp-msa.l.google.com (74.125.93.111) 56(84) bytes of data.
64 bytes from qw-in-f111.google.com (74.125.93.111): icmp_seq=1 ttl=247 time=26.7 ms  

Lynx를 통해 Google 및 다른 사이트에 문제없이 연결할 수 있습니다.

문제없이 Gmail 계정에 로그인했습니다 (보안 문자도 없음).

나는 끝났어. 누구든지 아이디어가 있습니까?

지맨


스크립트는 실패 모두 시간? 아니면 가끔?
MikeyB

매번 실패합니다.
GeoffreyF67

주기적으로 TCP를 다시 연결하는 C로 작성된 데몬과 비슷한 문제가 발생했습니다. 어느 시점에서 getaddrinfo ()가 갑자기 오류를 반환하기 시작했습니다. 서버를 살펴볼 때 DNS 요청이 전송되지 않았으며 / etc / hosts에 필요한 항목을 추가해도 도움이되지 않았습니다. 물론, 재시작이 도움이되지만 Xerxes가 올바르게 지적했듯이 이것은 실제 솔루션이 아닙니다. 처음에는 freeaddrinfo () 호출이 누락되어 문제가 발생했다고 생각했지만 테스트 응용 프로그램으로 재현하지 못했습니다. 어쨌든 데몬에 적절한 정리 호출을 추가하고 자세히 모니터링 할 것입니다.
Linulin

답변:


13

PHP가 / etc / hosts 또는 /etc/resolv.conf에 액세스하는 데 문제 가 있습니다.이 특정 오류와 관련하여 PHP에서 오래 지속되는 문제 가 있습니다. 해결 방법은 Apache를 다시 시작하거나 PHP를 호출하는 모든 항목을 다시 시도하거나 PHP를 호출하는 대상이 / etc / hosts 및 /etc/resolv.conf를 읽을 수 있도록하는 것입니다.


재시동이 트릭을했다!
GeoffreyF67

4
예,하지만 다음에 다시 시작하기까지 얼마나 걸립니까? 더 자세히 살펴보고 문제의 근본 원인을 찾으십시오.
Xerxes

와우 같은 문제가 있었지만 분명히 서비스 httpd 다시 시작이 해결책입니다 ...하지만 여전히이 원인을 이해하지 못합니다 ...
J_Wesker

6

방금 같은 오류가 발생했습니다.

service httpd restart

트릭을 했어 ...


2
% dig @208.67.222.222 smtp.gmail.com +short
gmail-smtp-msa.l.google.com.
209.85.201.109
209.85.201.111
%

이제 Xdebug를 사용하여 문제의 정확한 위치를 봅니다 ....

<?php
xdebug_start_trace('/tmp/lookup-trace.log');
$ip = gethostbyname('smtp.gmail.com');
xdebug_stop_trace();
die($IP);
?>

로그에 좋은 점이 있습니까?


1

스크립트가 올바르게 해결할 수 있도록 해당 줄 앞에 디버깅 코드를 추가하십시오.


0

나는 오늘이 잘못을 겪었지만 특정 사건 이후에 내가 원인을 발견했다고 생각하게하는 사건이 발생했습니다.

일부 네트워크 장비 문제로 인해 실제로 서버로 재부팅했으며 다시 연결했을 때 케이블 연결에 잘못된 네트워크 연결이있어 사실상 DNS 서버를 사용할 수 없었습니다.

그 동안이 PHP 함수가 호출 되었으며이 후 httpd를 다시 시작할 때까지 다시 작동하지 않았습니다.

버그는 네트워크 장애 (DNS를 사용할 수 없을뿐만 아니라 도달 할 수없는 (예 : 잘못된 서브넷))와 관련이있을 수 있으며 네트워크가 이후에 복구 될 때이 기능은 DNS를 다시 찾지 않습니다.

이 주제는 몇 년 전, 아마도이 버그가 PHP에서 수정 되었을까요?


0

magento 2를 최신 버전으로 업그레이드하는 동안 다음과 같은 문제가 발생했기 때문에 PHP 구성에 문제가 있다고 생각합니다.

The "https://repo.magento.com/packages.json" file could not be downloaded: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution 
failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

xampp through 명령을 다시 시작하여이를 해결했습니다.

sudo /opt/lampp/lampp/stop
sudo /opt/lampp/lampp/start

그런 다음 composer update명령을 다시 시도하고 매력처럼 작동했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.