关于php:php_network_getaddresses:getaddrinfo失败:名称或服务未知

php_network_getaddresses: getaddrinfo failed: Name or service not known

这是我的代码片段

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

当我运行它时,它输出:

unable to connect to www.mydomain.net/1/file.php:80 (php_network_getaddresses: getaddrinfo failed: Name or service not known

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

我不知道为什么。 任何帮助将不胜感激。


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

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

如果只想发送HTTP请求而忽略响应,则可以使用fsockopen()并手动发送HTTP请求标头,而忽略任何响应。不过,使用cURL或使用简单的老式fopen()可能会更容易,它将打开连接,但不一定读取任何响应。如果要使用fsockopen()进行操作,它可能看起来像这样:

1
2
3
4
5
6
7
8
$fp = fsockopen("www.mydomain.net", 80, $errno, $errstr, 30);
fputs($fp,"GET /1/file.php HTTP/1.1
"
);
fputs($fp,"Host: www.mydomain.net
"
);
fputs($fp,"Connection: close

"
);

当然,这会让您处理任何错误,但这意味着您不会浪费时间阅读响应。


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

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

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

1
192.168.1.1 www.testdomain.loc

希望这对任何人有帮助


如果只想将GET数据提交到URL,则应使用诸如file_get_contents();之类的简单方法。

1
2
$myGetData ="?var1=val1&var2=val2";
file_get_contents($url.$myGetData);


遇到了这样的问题(使用https://github.com/PHPMailer/PHPMailer),只需重新加载PHP即可开始一切正常

对于Centos 6和7:

1
service php-fpm restart

1
2
3
$url ="http://user:[email protected]/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;

您正在尝试打开不正确的远程主机上文件的套接字。您可以建立到远程主机上端口号的套接字连接(TCP / UDP)。因此您的代码应如下所示:

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

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

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

所以代码是这样的:

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

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

编辑:
从注释和其他答案中我发现您希望将HTTP请求发送到指定的URL。
该答案中描述的方法适用于您希望从远程URL接收数据的情况。如果要发送数据,可以使用http_request()进行此操作。


以我为例,此错误是由debian上的/etc/nsswitch.conf配置错误引起的。

我已被替换为字符串

1
hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns

与

1
hosts:          files dns

现在一切正常。


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

  • 我在CentOS服务器中通过SSH登录。用户名和密码
    类型
  • cd / etc /
  • ls //"仅关注列表"
  • vi主机//"编辑主机文件"
  • i //"将文件置于插入模式"
  • 在我的情况下为95.183.24.10 [mail_server_name](" mail.kingologic.com")
  • 按ESC键
  • 按ZZ
  • 希望它能解决您的问题

    如有任何疑问,请在http://kingologic.com上ping我


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


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

    为了使此扩展名起作用,必须有Windows系统PATH可用的DLL文件。有关如何执行此操作的信息,请参见标题为"如何在Windows上将我的PHP目录添加到PATH"的FAQ。尽管也可以将DLL文件从PHP文件夹复制到Windows系统目录中(因为默认情况下系统路径是系统路径中的系统目录),但不建议这样做。此扩展要求以下文件位于PATH中:libeay32.dll

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