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

2022-08-30 08:52:26

这是我的代码片段

$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']

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


答案 1

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

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

如果您只想发送 HTTP 请求并忽略响应,则可以使用并手动发送 HTTP 请求标头,忽略任何响应。不过,使用cURL可能会更容易,或者只是普通的旧fopen(),这将打开连接但不一定读取任何响应。如果要使用 ,它可能看起来像这样:fsockopen()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"); 

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


答案 2

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

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

在我添加的文件 /etc/hosts 中:

192.168.1.1 www.testdomain.loc

推荐