fopen 失败,getaddrinfo 失败

Posted

技术标签:

【中文标题】fopen 失败,getaddrinfo 失败【英文标题】:fopen fails with getaddrinfo failed 【发布时间】:2011-08-01 11:04:34 【问题描述】:

以下代码有问题:

function http_file_exists($url)
$f=fopen($url,"r");
if($f)
    fclose($f);
    return true;
 else 
  return false;

$url = "http://www.minhemmelighed.dk/Graphics/Products/55.jpg";

打印 http_file_exists($url);

它返回的错误是:

警告:fopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /srv/http/webshop3/image_scraper/test.php on line 6 警告:fopen(http://www.minhemmelighed.dk/Graphics /Products/55.jpg):无法打开流:php_network_getaddresses:getaddrinfo 失败:第 6 行 /srv/http/webshop3/image_scraper/test.php 中的名称或服务未知

对此我能做些什么?我已经重启了几次服务器。

记录在案:

我可以通过浏览器访问相关网站

我在 Arch Linux 上运行 LAMP

【问题讨论】:

DNS 是否也在服务器上工作?您如何测试您是否可以访问相关网站? DNS 应该可以工作,我认为?我该如何测试呢? :) 我在浏览器中访问该网站没有问题 查看我的答案以了解测试 DNS 的方法。不要忘记以 php 用户身份在服务器上测试它。 (哦,如果您没有实际测试过,请尽量不要声称它有效)。 【参考方案1】:

重新启动 UNIX 服务器极不可能解决问题。看起来您需要检查服务器上的名称服务器配置。在web服务器的控制台(以php用户登录,可能是apachewww-data),测试

dig www.minhemmelighed.dk

如果这输出错误消息,请检查您的/etc/resolv.conf。注释掉所有行并添加

nameserver 8.8.8.8 # Google's public DNS server

如果这样可以解决问题,请联系原始域名服务器的管理员(或直接使用 Google 的 8.8.8.8)。如果没有,请检查您的连接和防火墙。

【讨论】:

谢谢 :) 但它没有解决问题 :S 恐怕这是 Apache 服务器错误 :( @Eax 你在哪一步失败了? IE。 dig 工作了吗?这个问题几乎可以肯定与 HTTP 服务器、Apache 或其他服务器完全无关。 对不起 :) 挖掘没有失败,我也可以在浏览器中访问 minhemmelighed.dk 没有问题 :) @Eax 如果dig服务器 上作为php 用户su apachesu www-data)成功,你能发布一个链接到strace php -r 'file_get_contents("http://www.minhemmelighed.dk/Graphics/Products/55.jpg");' 的输出pastebin.com 左右? 这些用户都不存在:S【参考方案2】:

对于那些运行像 CentOS 这样非常封闭的发行版的人来说,这可能是我在我的系统上发现的 SELinux 的一项安全功能。

在命令提示符下键入:

getsebool -a | grep httpd

然后寻找

httpd_verify_dns --> 关闭

如果是这种情况,您需要使用以下命令将其设置为 On

setsebool httpd_verify_dns=1

或永久使用:

setsebool -P httpd_verify_dns=1

记得重启httpd:

服务 httpd 重启 每次更改后

希望对你有帮助

标记

【讨论】:

以上是关于fopen 失败,getaddrinfo 失败的主要内容,如果未能解决你的问题,请参考以下文章

getaddrinfo() 连续失败并出现 EAI_AGAIN

IPv6 的 getaddrinfo 始终失败,错误代码为 11268096

PHPMailer 错误:php_network_getaddresses:getaddrinfo 失败:LOCALHOST(XAMPP)中的名称解析暂时失败

C++ - getaddrinfo() - 使用动态 dns 获取自己的外部 IP 失败

php_network_getaddresses:getaddrinfo失败:没有这样的主机是已知的,为啥会显示[关闭]

使用 Ngrok 时 Python TCP 套接字返回 getaddrinfo 失败