以下是我的代码片段
$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']
我无法弄清楚原因。任何帮助将不胜感激。
答案 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()的相同错误,我刚刚更新了我的主机文件
希望它能解决您的问题
如有任何进一步的问题,请在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
答案 9 :(得分:0)
简单来说,您的网站已被阻止访问网络。可能是你自动化了一些脚本,它导致整个网站被阻止。解决此问题的更好方法是联系该网站并告知您的问题。如果问题是真的,他们可能会考虑取消阻止