我的智慧结束了这个。我在我的服务器(亚马逊ec2实例)上运行apache,我似乎无法解析php中的域名。例如fopen(' http://www.google.com'' r')将抛出" php_network_getaddresses:getaddrinfo失败:名称或服务未知",但如果我将网址更改为谷歌的IP地址之一,它将正常工作。在远程服务器上ping www.google.com也可以正常工作,所以我知道"外部系统没有问题。"
奇怪的是,我已经让这台服务器运行了一段时间没有任何问题,我无法想到我做过的任何可能导致这种情况的事情。
在我的php.ini中,我有allow_url_fopen = On并确保它已被应用我从遇到此问题的同一脚本运行phpinfo()并且实际上是allow_url_fopen已打开。
我应该尝试哪些其他想法?某种文件权限问题会导致这种情况吗?因为我确实在我的webapp中更改了一些文件权限,我想我可能错误地输入了一些内容并且意外地更改了应用程序之外的某些文件的权限/欠权限。它极不可能,但我无法想到我在系统上做的任何其他事情都可以阻止它工作。
答案 0 :(得分:5)
我遇到了同样的问题。
httpd restart 主机解析问题仍然存在。 但是 httpd stop&开始问题为我解决了。
答案 1 :(得分:3)
如果您有权限,请尝试将/etc/resolv.conf文件中的名称服务器更改为其他名称服务器。你的dns缓存可能很旧,
或尝试通过在终端中运行以下命令来更改SE Linux策略:
setsebool -P nis_enabled 1
setsebool -P httpd_can_network_connect 1
答案 2 :(得分:1)
我的开发中遇到同样的问题,只是在apache下执行php,但直接用php,它可以工作!
php filetest.php
然后我检查了我的apache状态,我在日志中看到了这个:
Mar 12 13:01:08 arch-linux apachectl[6847]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::6aa3:c4ff:fe...is message
经过一番搜索,我找到了它:
http://tutorialforlinux.blogspot.com.br/2013/10/solve-problem-ah00558-when-restarting.html
这是一个非常棘手的问题,然后我在httpd.conf中改变了这个问题:
#ServerName www.example.com:80
对此:
ServerName localhost
它有效,现在我可以在apache下解析php中的dns。
抱歉我的英文不好,我想详细说明一下。
答案 3 :(得分:0)
您可以尝试使用file_get_contents
:
file_get_contents('http://www.google.com');
fopen
和file_get_contents
几乎相同,但并不总是在服务器上的相同配置下工作。
答案 4 :(得分:0)
你确定是因为Apache吗?我要做的第一步是在终端中运行以下脚本。您应该看到打印出的所有HTML文本:
<?php
$handle = @fopen("http://www.google.com", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
echo $buffer;
}
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
如果这不起作用,下一步是检查您的DNS解析器是否正常工作。什么是
的输出host www.google.com
完成这两项测试后,我们可以决定进入哪个方向。
答案 5 :(得分:0)
(抱歉,我没有足够的声誉来添加评论)。在我看来,这可能与在chrooted环境中运行Apache有关。