Tymczasowy błąd w rozpoznawaniu nazw: błąd wyszukiwania nazwy hosta


10

Mam skrypt w PHP, który działa dobrze od miesięcy. Niedawno przestał działać.

Ten skrypt łączy się z Gmailem, aby wysłać e-mail do moich klientów.

Niedawno zacząłem otrzymywać ten błąd po uruchomieniu skryptu:

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'

Pamiętaj, że było to z zerowymi zmianami kodu.

Spojrzałem na mój resolv.conf i wydaje się być w porządku:

nameserver 208.67.222.222

Mogę ping ping gmail.com:

# 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  

Mogę bez problemu połączyć się przez Lynx z Google i innymi witrynami.

Zalogowałem się na swoje konto Gmail bez żadnych problemów (nie ma też captcha).

Jestem na granicy rozumu. Czy ktoś ma jakieś pomysły?

G-Man


Czy skrypt cały czas zawodzi ? A może od czasu do czasu?
MikeyB

Zawodzi za każdym razem.
GeoffreyF67

Napotkałem podobny problem z moim demonem napisanym w C, który dokonuje okresowych ponownych połączeń TCP. W pewnym momencie getaddrinfo () nagle zaczął zwracać błąd. Kiedy spojrzałem na serwer, żadne żądania DNS nie były wysyłane, a dodanie wymaganego wpisu do / etc / hosts nie pomogło. Jasne, restart pomaga, ale jak słusznie zauważył Kserkses, nie jest to prawdziwe rozwiązanie. Początkowo myślałem, że problem jest spowodowany brakiem wywołania freeaddrinfo (), ale nie udało mi się go odtworzyć za pomocą aplikacji testowej. W każdym razie dodałem do demona odpowiednie wywołania czyszczenia i będę go ściśle monitorował.
Linulin

Odpowiedzi:


13

PHP ma problemy z dostępem do / etc / hosts lub /etc/resolv.conf: w PHP występuje od dawna problem związany z tym konkretnym błędem. Rozwiązaniem jest ponowne uruchomienie Apache lub cokolwiek wywołującego PHP lub upewnienie się, że pliki / etc / hosts i /etc/resolv.conf są czytelne przez to, co wywołuje PHP.


Uruchom ponownie załatwiło sprawę!
GeoffreyF67

4
Tak, ale ile czasu minęło przed kolejnym restartem? Chciałbym poszukać dalej i znaleźć podstawową przyczynę problemu.
Kserkses

Wow, miałem ten sam problem, ale najwyraźniej usługa httpd restart jest rozwiązaniem ... ale nadal nie rozumiem, co to powoduje ...
J_Wesker

6

Właśnie spotkałem ten sam błąd i

service httpd restart

zrobił lewę ...


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

Teraz spróbuj użyć Xdebug, aby zobaczyć, gdzie dokładnie jest problem…

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

Coś dobrego w logach?


1

Dodaj kod debugowania przed tym wierszem, aby upewnić się, że skrypt może go poprawnie rozwiązać.


0

Miałem dzisiaj tę wadę, jednak zdarzyło się to po określonym wydarzeniu, które każe mi myśleć, że mogłem znaleźć przyczynę.

Z powodu pewnych problemów ze sprzętem sieciowym zrestartowałem się ponownie przez serwer, a kiedy wrócił, było nieprawidłowe połączenie sieciowe w okablowaniu, co oznacza, że ​​żaden serwer DNS nie był dostępny.

w międzyczasie została wywołana ta funkcja php, a potem już nigdy nie działała, dopóki nie zrestartowałem httpd.

Myślę, że błąd może odnosić się do awarii sieci (gdzie DNS jest nie tylko niedostępny, ale nieosiągalny, tj. Zła podsieć), a kiedy sieć następnie odzyskuje tę funkcję, DNS nie szuka ponownie.

To było kilka lat temu, może ten błąd jest teraz naprawiony w PHP?


0

Miałem następujący problem podczas aktualizacji Magento 2 do najnowszej wersji, więc podejrzewam, że jest to problem z konfiguracją 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

Rozwiązano go poprzez ponowne uruchomienie polecenia xampp poprzez.

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

Następnie ponowiłem composer updatepolecenie i zadziałało to jak urok.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.