Временная ошибка в разрешении имени: ошибка поиска имени хоста


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 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 без проблем (без каптчи там тоже).

Я в конце концов. У кого-нибудь есть идеи?

G-Man


Сценарий все время не работает? Или просто изредка?
MikeyB

Сбой каждый раз.
GeoffreyF67

Я столкнулся с подобной проблемой с моим демоном, написанным на C, который выполняет периодические переподключения TCP. В какой-то момент getaddrinfo () неожиданно начал возвращать ошибку. Когда я посмотрел на сервер, DNS-запросы не отправлялись, и добавление необходимой записи в / etc / hosts не помогло. Конечно, перезагрузка помогает, но, как справедливо заметил Ксеркс, это не настоящее решение. Сначала я думал, что проблема была вызвана отсутствием вызова freeaddrinfo (), но мне не удалось воспроизвести его с помощью тестового приложения. В любом случае, я добавил правильные вызовы очистки демону и собираюсь внимательно следить за ним.
Линулин

Ответы:


13

У PHP возникают проблемы с доступом к / etc / hosts или /etc/resolv.conf: в PHP существует давняя проблема, связанная с этой конкретной ошибкой. Исправление состоит в том, чтобы попытаться перезапустить Apache или любой другой, вызывающий PHP, или убедиться, что / etc / hosts и /etc/resolv.conf читаемы тем, что вызывает PHP.


Перезагрузка сделала свое дело!
GeoffreyF67

4
Да, но как долго до следующего перезапуска? Я бы посмотрел дальше и выяснил причину проблемы.
Ксеркс

Ничего себе у меня был тот же вопрос, но , видимо , сервис 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);
?>

Что-нибудь хорошее в журналах?



0

У меня была эта ошибка сегодня, однако это произошло после определенного события, которое заставляет меня думать, что я, возможно, нашел причину.

Из-за некоторых проблем с сетевым оборудованием я фактически перезагрузил сервер, и когда он вернулся, в кабеле было неправильное сетевое соединение, что фактически означало, что DNS-сервер недоступен.

Тем временем эта функция php была вызвана, и после этого она никогда не работала, пока я не перезапустил httpd.

Я думаю, что ошибка может относиться к сбою сети (где DNS не только недоступен, но и недоступен, то есть неправильная подсеть), и когда сеть впоследствии восстанавливается, эта функция больше не ищет DNS.

Эта thead была несколько лет назад, может быть, эта ошибка сейчас исправлена ​​в 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 через команду.

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

Затем попробовал composer updateкоманду еще раз, и она сработала как шарм.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.