名称解析暂时失败:主机名查找失败

名称解析暂时失败:主机名查找失败

我有一个 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

我可以 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  

我可以通过 lynx 毫无问题地连接到 google 和其他网站。

我已经顺利登录了我的 Gmail 账户(也没有验证码)。

我已经束手无策了。有人有什么想法吗?

G-Man

答案1

PHP 在访问 /etc/hosts 或 /etc/resolv.conf 时遇到问题:长期存在的问题在 PHP 中与此特定错误相关的问题。解决方法是尝试重新启动 Apache 或任何调用 PHP 的程序,或者确保 /etc/hosts 和 /etc/resolv.conf 可被调用 PHP 的程序读取。

答案2

我刚刚遇到了同样的错误

service httpd restart

成功了……

答案3

% 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);
?>

日志里有什么好东西吗?

答案4

我今天遇到了这个故障,然而它是在一个特定事件之后发生的,这让我认为我可能找到了原因。

由于某些网络设备故障,我实际上重新启动了服务器,当它重新启动时,发现电缆中的网络连接不正确,这实际上意味着没有可用的 DNS 服务器。

与此同时,这个 php 函数被调用,之后它就再也没有起作用了,直到我重新启动 httpd。

我认为该错误可能与网络故障有关(DNS不仅不可用,而且无法访问,即错误的子网),并且当网络随后恢复时,此功能不会再次查找DNS。

这个主题是几年前的,也许这个错误现在在 PHP 中已经修复了?

相关内容