34

我遇到某个目标域的 DNS 问题。我正在使用fopen()(但与其他功能相同的问题)来检索图像,但我收到此错误: Warning: fopen(): php_network_getaddresses: getaddrinfo failed: No such host is known

我可以从命令提示符 ping 或 nslookup 域,但由于某种原因 php 会抛出此错误。当我尝试fopen('http://www.google.com', r);或其他域时,一切都很好。但是上面提到的域根本不会用 PHP 解析。我已经刷新了 DNS,重新启动了 Apache,但仍然没有运气..

我尝试过:

  • Windows 7、Apache 2.2 PHP 5.3.6
  • Windows 服务器 2008r2、Apache 2.2 PHP 5.3.6

什么会导致这个单一域无法解析?

4

8 回答 8

24

IMO 这是从操作系统和 PHP 解析名称的不同方式。

尝试:

echo gethostbyname("host.name.tld");

var_export (dns_get_record ( "host.name.tld") );

或者

$dns=array("8.8.8.8","8.8.4.4");
var_export (dns_get_record ( "host.name.tld" ,  DNS_ALL , $dns ));

您应该发现一些 DNS/解析器错误。

于 2011-11-28T23:35:35.863 回答
3

您的“localhost”无法解析名称 www.google.com,这意味着您的机器无法/无法访问有效的 dns 服务器。

尝试在该机器的控制台上 ping google.com 以验证这一点。

于 2011-12-14T11:42:36.317 回答
2

curl使用它来代替fopenfile_get_content打开网页更加灵活。

于 2015-08-24T17:50:08.967 回答
1

getaddrinfo 失败:没有这样的主机是已知的

上述错误是由于 .env 文件中的 Database Host (DB_HOST) 错误引起的

打开 .env 文件并特别检查这个 env 变量

DB_HOST=localhost
DB_DATABASE=database_name
DB_USERNAME=database_username
DB_PASSWORD=database_password
于 2021-07-26T14:43:00.113 回答
0

您的目标域可能会拒绝向您发送信息。这可以用作基于浏览器代理或任何其他标头信息的过滤器。这是对机器人、爬虫或任何不需要的应用程序的防御。

于 2019-12-16T00:08:28.880 回答
0

我在 Windows 上遇到了很多问题。我刚刚执行了 git clone,将我的.env.example文件复制到.env. 更新它,并执行我可信赖的 PHP 脚本来更新用于项目的初始数据库。它失败了,无论我做什么,它一直在失败。出于绝望,我重新安装了 MySQL,但这并没有解决问题。

最后,我想通了。PHP 脚本使用 提取.env文件中的设置file_get_contents(),并使用 展开它\n,但.env文件是用 CRLF 编码的,所以我的 DB_HOST 是空的。在我更改.env文件的编码后,一切都很好。

所以,我的意思是,回显提供给 的参数mysqli::construct,这可能是罪魁祸首。

于 2021-10-09T00:07:03.460 回答
-1

我发现一个奇怪的事情是SYSTEMROOT必须设置环境变量,否则getaddrinfo()在 Windows 10 上会失败。

于 2017-12-17T23:45:52.077 回答
-4

导致我这个错误的原因是以下行

include_once dirname(__FILE__) . './Config.php';

当我添加这些行时,我设法意识到这是罪魁祸首:

//error_reporting(E_ALL | E_DEPRECATED | E_STRICT);
//ini_set('display_errors', 1);

到我所有的 php 文件。

为了解决path issue我把有问题的行改为:

include_once dirname(__FILE__) . '/Config.php';
于 2015-10-31T12:20:54.710 回答