【问题标题】:PHP error: php_network_getaddresses: getaddrinfo failed: (while getting information from other site.)PHP错误:php_network_getaddresses:getaddrinfo失败:(从其他站点获取信息时。)
【发布时间】:2011-06-08 07:31:25
【问题描述】:

尝试从外部来源获取信息,我收到以下错误:

警告:php_network_getaddresses:getaddrinfo failed:第#行名称解析暂时失败...

昨天一切都很好,那么这个脚本发生了什么,它不起作用并给我上面的错误?有什么办法或提示可以解决这个问题吗?

$uri = "http://api.hostip.info/?ip=$ip&position=true";

$dom->load($uri);

我也尝试将 DNS 转换为 IP,但随后收到警告:failed to open

$uri = "174.129.200.54/?ip=$ip&position=true";

我试图删除http,但仍然收到上述错误。

【问题讨论】:

  • @Cold Hawaiian:好的,我正在更新我的问题。
  • 您可以在浏览器中直接打开链接吗?如果不是,那不是 PHP 问题。 Hostip.info 可能会因为滥用或其他原因而阻止您访问他们的网站。
  • 在我的电脑上这个命令可以正常工作:curl "http://api.hostip.info/?ip=`curl whatismyip.org`&position=true"
  • 是的,这里也可以正常工作..但在脚本中不起作用。
  • 答案是纠正你的/etc/hosts。确保 url 指向它应该指向的位置(通常是 localhost)。

标签: php warnings


【解决方案1】:

这是因为您无法解析主机名 可能是 DNS 问题,主机无法访问...

尝试使用 IP 地址而不是主机名... ping 这个主机名... nslookup 它...

【讨论】:

  • 我将 "api.hostip.info" 转换为 "174.129.200.54" 但仍然无法正常工作并且警告消息 => 加载失败..
  • 这是正确的,因为 api.hostip.info 不是 174.129.200.54 的默认值
  • 尝试 wget api.hostip.info/?ip=$ip&position=true 如果它返回正确的 xml,则问题不在连接...
  • 但它与此无关..那么,该怎么办。或解决此问题。任何的想法。谢谢..
  • 这个命令对我有用:sudo systemctl restart systemd-resolved.service
【解决方案2】:

在以下httpd.conf文件中,正确配置ServerName

/etc/httpd/conf/httpd.conf

如下:

ServerName 127.0.0.1:80

ServerName sitename

这解决了我面临的类似问题。

【讨论】:

  • 我不知道为什么这会有所作为,但它也解决了我的问题。我会定期遇到 DNS 故障并设置 ServerName 解决了这个问题。
【解决方案3】:

在我的情况下(我的机器是 ubuntu 16),我通过添加下面的 ns 行来附加 /etc/resolvconf/resolv.conf.d/base 文件。

nameserver 8.8.8.8
nameserver 4.2.2.1
nameserver 2001:4860:4860::8844
nameserver 2001:4860:4860::8888

然后运行更新脚本,

resolvconf -u

【讨论】:

  • @AbdulAzizAlBasyir 由于 dns 解析,脚本尝试识别地址。您可以从here. 找到更多信息。
【解决方案4】:

我认为您正在使用的缓存 DNS 服务器运行不正常(或者您正在解析的域的 DNS 服务器运行不正常)。您可以尝试解决前一种可能性。

您的网络适配器上是否注册了至少 2 个名称服务器?您可以随时更换您的计算机以使用不同的缓存 DNS 服务器来排除这种情况。试试 Google 的:

8.8.8.8
8.8.4.4

【讨论】:

  • 我尝试了很多方法但不幸的是没有成功,而且也没有一种直接的方法......我现在卡住了......该怎么办......
  • 这不是必需的方法 - 这是您服务器的缓存 DNS 配置(如果您有访问权限)。
  • 但是,我已经执行了这段代码并给出了输出,但现在不工作了。
【解决方案5】:

如果您可以减少尝试连接的远程服务器上的瞬时中断,那么这只会使本地网络配置成为问题。

使用 IP 地址代替主机名仅适用于远程主机上的默认域。

当您尝试使用 www.google.com(或其 IP 地址)时会发生什么?如果还是连接不上,那就是你的服务器和外界的网络有关系。

【讨论】:

  • 可能是内部服务器配置问题。
【解决方案6】:

虽然这是一个旧线程,但我最近在 CentOS 7 中运行 nslookup 时遇到了同样的错误,谷歌搜索让我在 SO 中进行了一些讨论,包括这个。但是,仅将名称服务器条目添加到 /etc/resolv.conf 并没有帮助,因为网络管理器使用与以太网 IP 配置关联的 eth 配置文件中的默认 DNS 名称服务器覆盖了 resolv.conf 中的名称服务器值。

正如@m-canvar 所说,在 /etc/resolv.conf 中设置以下条目

search yourdomain.com
nameserver 8.8.8.8
nameserver 4.2.2.1
nameserver 8.8.4.4

为了防止 NetworkManager 覆盖这些条目,有两种方法:

选项 1:在与 IPv4/IPv6 配置文件关联的 eth 配置文件中设置 NM_CONTROLLED=no。

选项 2:禁止 NetworkManager 服务运行。

chkconfig NetworkManager off
service NetworkManager stop

更多详情可以参考我的post about this error and solution

【讨论】:

    【解决方案7】:

    虽然我没有使用这个确切的功能,但我得到了同样的错误。

    就我而言,我只需要删除协议。

    而不是$uri = "http://api.hostip.info/?ip=$ip&position=true";

    使用$uri = "api.hostip.info/?ip=$ip&position=true";

    后来效果很好

    【讨论】:

      【解决方案8】:

      就我而言,这是由wp cli 发布的,问题是我没有安装php7.3-curl。固定为:apt-get install -y --quiet php7.3-curl

      【讨论】:

        【解决方案9】:

        我认为您应该尝试将 php7.3-curl 替换为 api.hostip.info/?ip=$ip&position=true 。希望这会有所帮助

        【讨论】:

          【解决方案10】:

          我遇到了这个问题,在连接数据库时,连接数据库的变量没有定义。

          原因: php 尝试使用 数据库主机的未定义变量(localhost/127.0.0.1/...任何其他 ip 或域)连接到数据库但未能追踪域。

          解决方案:确保正确定义了db host

          【讨论】:

            【解决方案11】:

            我在 Docker for Ubuntu 上遇到了类似的问题。这是一个DNS问题。您必须将 Google 公共 DNS 设置添加到您的网络中。添加这些设置的说明取决于操作系统。就我而言,我使用的是 Ubuntu,所以我通过网络管理器添加。访问this 网站了解更多信息。

            【讨论】:

              猜你喜欢
              • 2011-05-24
              • 2011-08-23
              • 2011-11-07
              • 2016-10-20
              • 1970-01-01
              • 2012-05-01
              • 2010-11-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多