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用户登录,可能是apache
或www-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 apache
或su 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失败:没有这样的主机是已知的,为啥会显示[关闭]