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

这是我的代码片段

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

如果你只想提交GET数据到URL,你应该使用一些简单的东西,比如file_get_contents();

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

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

如果您尝试访问远程URL,那么file_get_contents()是您最好的select。 您可以提供该函数的完整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"); 

这当然会给您带来任何错误,但这意味着您不会浪费时间阅读回复。

我有我的本地testing服务器和本地testdomains类似的问题,例如:www.testdomain.loc与函数GetImageSize() ;

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

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

 192.168.1.1 www.testdomain.loc 

希望这有助于任何人

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

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

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

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

PHP为URL文件打开提供了默认的stream包装器。 基于URL的模式,适当的stream包装将在内部被调用。 您尝试打开的URL没有此解决scheme的有效架构。 确保其中有一个像“http://”或“ftp://”的模式。

所以代码会是这样的:

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

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

编辑:从评论和其他答案我想你会想发送一个HTTP请求到指定的URL。 此答案中描述的方法适用于您想要从远程URL接收数据的情况。 如果你想发送数据,你可以使用http_request()来做到这一点。

我得到了相同的错误fsocket(),我只是更新我的主机文件

  1. 我在CentOS服务器上通过SSHlogin。 USERNAME和PASSWORDtypes
  2. cd / etc /
  3. ls //“只是看清单”
  4. vi主机//“编辑主机文件”
  5. 我//“将文件放入插入模式”
  6. 在我的情况(“mail.kingologic.com”)95.183.24.10 [mail_server_name]
  7. 按ESC键
  8. 按ZZ

希望它能解决你的问题

对于任何进一步的查询请ping我在http://kingologic.com

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

我已经被换成了string

 hosts: files myhostname mdns4_minimal [NOTFOUND=return] dns 

 hosts: files dns 

现在一切正常。

尝试设置ENV PATH 。 将PHPpath添加到ENV PATH。

为了使此扩展工作,必须有可用于Windows系统PATH的DLL文件。 有关如何执行此操作的信息,请参阅题为“如何将我的PHP目录添加到Windows上的PATH”的FAQ。 尽pipe将DLL文件从PHP文件夹复制到Windows系统目录也是可行的(因为系统目录默认在系统的PATH中),所以不build议这样做。 此扩展需要以下文件在PATH中:libeay32.dll

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

简单的话你的网站已经被阻止访问networking。 可能是你已经自动化了一些脚本,并导致你的整个网站被阻止。 解决这个问题的更好的方法就是联系那个网站并告诉你的问题。 如果问题是真的,他们可能会考虑解除封锁