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(),我只是更新我的主机文件
- 我在CentOS服务器上通过SSHlogin。 USERNAME和PASSWORDtypes
- cd / etc /
- ls //“只是看清单”
- vi主机//“编辑主机文件”
- 我//“将文件放入插入模式”
- 在我的情况(“mail.kingologic.com”)95.183.24.10 [mail_server_name]
- 按ESC键
- 按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
简单的话你的网站已经被阻止访问networking。 可能是你已经自动化了一些脚本,并导致你的整个网站被阻止。 解决这个问题的更好的方法就是联系那个网站并告诉你的问题。 如果问题是真的,他们可能会考虑解除封锁