php_network_getaddresses:getaddrinfo failed:名称或服务未知

时间:2010-04-18 08:02:38

标签: php fsockopen

以下是我的代码片段

$fp = fsockopen($s['url'], 80, $errno, $errstr, 5);
if($fp){
        fwrite($fp, $out);
        fclose($fp);

当我运行它时,它会输出:

  

无法连接到www.mydomain.net/1/file.php:80(php_network_getaddresses:getaddrinfo失败:名称或服务未知

我正在使用它将GET数据提交到$s['url']

我无法弄清楚原因。任何帮助将不胜感激。

10 个答案:

答案 0 :(得分:36)

您无法使用fsockopen直接在远程主机上打开到路径的连接。当第一个参数的唯一有效值是主机www.mydomain.net/1/file.php时,网址www.mydomain.net包含一个路径。

如果您尝试访问远程网址,那么file_get_contents()是您最好的选择。您可以提供该功能的完整URL,它将使用普通的HTTP请求在该位置获取内容。

如果您只想发送HTTP请求并忽略响应,可以使用fsockopen()并手动发送HTTP请求标头,忽略任何响应。使用cURL可能会更容易,或者只是简单的旧fopen(),这将打开连接但不一定会读取任何响应。如果你想用fsockopen()来做,它可能看起来像这样:

$fp = fsockopen("www.mydomain.net", 80, $errno, $errstr, 30);
fputs($fp, "GET /1/file.php HTTP/1.1\n");
fputs($fp, "Host: www.mydomain.net\n");
fputs($fp, "Connection: close\n\n"); 

当然会留下任何错误处理,但这意味着您不会浪费时间阅读回复。

答案 1 :(得分:22)

如果您只想向网址提交GET数据,您应该使用像file_get_contents();

这样简单的内容
$myGetData = "?var1=val1&var2=val2";
file_get_contents($url.$myGetData);

答案 2 :(得分:22)

我在本地测试服务器和本地testdomains上遇到类似的问题,例如:www.testdomain.loc,函数为GetImageSize();

通过在本地服务器上的hosts文件中添加主机名来解决它:

/ etc / hosts 文件中,我添加了:

192.168.1.1 www.testdomain.loc

希望这有助于任何人

答案 3 :(得分:3)

$url = "http://user:pass@www.example.com/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;

答案 4 :(得分:2)

您正在尝试打开远程主机上不正确的文件的套接字。您可以将套接字连接(TCP / UDP)连接到远程主机上的端口号。所以你的代码应该是这样的:

fsockopen('www.mysite.com', 80);

如果您尝试为远程文件创建文件指针资源,可以使用fopen()函数。但要做到这一点,您还需要指定应用程序协议。

PHP为URL文件打开提供默认流包装器。根据URL的模式,将在内部调用适当的流包装器。您尝试打开的URL没有此解决方案的有效架构。确保其中有一个类似“http://”或“ftp://”的模式。

所以代码就像这样:

$fp = fopen('http://www.mysite.com/path/file.txt');

此外,我不认为HTTP流包装器(处理具有http模式的URL上的文件资源上的操作)支持写入数据。你可以使用fread()通过HTTP读取URL的内容,但我不确定是否写作。

编辑: 从评论和其他答案我发现你想要发送HTTP请求到指定的URL。 本答案中描述的方法适用于您希望从远程URL接收数据的时间。如果要发送数据,可以使用http_request()执行此操作。

答案 5 :(得分:2)

有这样的问题(使用https://github.com/PHPMailer/PHPMailer),只需重新加载PHP,一切都开始工作

对于Centos 6和7:

service php-fpm restart 

答案 6 :(得分:1)

我收到了fsocket()的相同错误,我刚刚更新了我的主机文件

  1. 我在CentOS服务器上通过SSH登录。用户名和密码 输入
  2. cd / etc /
  3. ls //“只是为了观看清单”
  4. vi hosts //“编辑主机文件”
  5. i //“将文件置于插入模式”
  6. 95.183.24.10 [mail_server_name]在我的情况下(“mail.kingologic.com”)
  7. 按ESC键
  8. 按ZZ
  9. 希望它能解决您的问题

    如有任何进一步的问题,请在http://kingologic.com

    ping我

答案 7 :(得分:1)

在我的情况下,这个错误是由debian上的/etc/nsswitch.conf配置错误引起的。

我已被替换为字符串

hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

hosts:          files dns

现在一切正常。

答案 8 :(得分:0)

尝试设置 ENV PATH 。将PHP路径添加到ENV PATH。

为了使此扩展能够工作,Windows系统PATH必须具有DLL文件。有关如何执行此操作的信息,请参阅标题为“如何将PHP目录添加到Windows上的PATH”的常见问题解答。虽然将DLL文件从PHP文件夹复制到Windows系统目录也可以(因为系统目录默认位于系统的PATH中),但不建议这样做。此扩展需要以下文件位于PATH:libeay32.dll

http://php.net/manual/en/openssl.installation.php

答案 9 :(得分:0)

简单来说,您的网站已被阻止访问网络。可能是你自动化了一些脚本,它导致整个网站被阻止。解决此问题的更好方法是联系该网站并告知您的问题。如果问题是真的,他们可能会考虑取消阻止