php_网络_getaddresses:getaddrinfo失败:名称或服务未知

php_网络_getaddresses:getaddrinfo失败:名称或服务未知,php,fsockopen,Php,Fsockopen,下面是我的代码片段 $fp = fsockopen($s['url'], 80, $errno, $errstr, 5); if($fp){ fwrite($fp, $out); fclose($fp); 当我运行它时,它会输出: 无法连接到www.mydomain.net/1/file.php:80(php\u network\u getaddress:getaddrinfo失败:名称或服务未知 我正在使用它将GET数据提交到$s['url'] 我不知道为什么

下面是我的代码片段

$fp = fsockopen($s['url'], 80, $errno, $errstr, 5);
if($fp){
        fwrite($fp, $out);
        fclose($fp);
当我运行它时,它会输出:

无法连接到www.mydomain.net/1/file.php:80(php\u network\u getaddress:getaddrinfo失败:名称或服务未知

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


我不知道为什么。如果您能提供任何帮助,我将不胜感激。

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

fsockopen('www.mysite.com', 80);
$fp = fopen('http://www.mysite.com/path/file.txt');
$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"); 
如果试图创建指向远程文件的文件指针资源,可以使用fopen()函数。但要执行此操作,还需要指定应用程序协议

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

所以代码是这样的:

fsockopen('www.mysite.com', 80);
$fp = fopen('http://www.mysite.com/path/file.txt');
$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"); 
此外,我不认为HTTP流包装器(处理带有HTTP模式的URL上的文件资源的操作)支持数据写入。您可以使用fread()通过HTTP读取URL的内容,但我不确定是否写入

编辑: 从评论和其他答案中,我发现您可能希望向指定的URL发送HTTP请求。
此答案中描述的方法适用于您希望从远程URL接收数据的情况。如果您希望发送数据,您可以使用。

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

如果您试图访问远程URL,那么这是您的最佳选择。您可以提供该函数的完整URL,它将使用普通HTTP请求获取该位置的内容

如果您只想发送HTTP请求并忽略响应,可以使用
fsockopen()
手动发送HTTP请求头,忽略任何响应。但是,使用更简单的方法可能会更容易,或者只使用普通的旧方法,这将打开连接,但不一定读取任何响应。如果您想使用
fsockopen()执行此操作
,它可能看起来像这样:

fsockopen('www.mysite.com', 80);
$fp = fopen('http://www.mysite.com/path/file.txt');
$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"); 

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

如果您只想将GET数据提交到URL,您应该使用类似file_GET_contents()的简单方法


我在本地testserver和本地testdomain上遇到了类似的问题,例如:www.testdomain.loc,函数为
GetImageSize()

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

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

192.168.1.1 www.testdomain.loc

希望这能帮助任何人

尝试设置环境路径。将PHP路径添加到环境路径中

$url = "http://user:pass@www.example.com/abc.php?var1=def";
$contents = file_get_contents($url);
echo $contents;
要使此扩展正常工作,Windows系统路径中必须有可用的DLL文件。有关如何执行此操作的信息,请参阅题为“如何将我的PHP目录添加到Windows上的路径”的常见问题解答。尽管将DLL文件从PHP文件夹复制到Windows系统目录也可以正常工作(因为系统目录默认位于系统路径中),因此不建议这样做。此扩展名要求以下文件位于路径中:libeay32.dll


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

  • 我在CentOS服务器上通过SSH登录。用户名和密码 类型
  • cd/etc/
  • ls//“只是为了观看列表”
  • vi主机//“编辑主机文件”
  • i//“将文件置于插入模式”
  • 95.183.24.10[邮件服务器名称]在我的情况下(“mail.kingologic.com”)
  • 按ESC键
  • 新闻ZZ
  • 希望它能解决你的问题


    如需进一步查询,请在

    处与我联系。在我的情况下,此错误是由debian上错误的/etc/nsswitch.conf配置引起的

    我被替换了

    hosts:          files myhostname mdns4_minimal [NOTFOUND=return] dns
    


    现在一切正常工作。

    < P>简单地说,你的站点已经被阻止访问网络。可能是你自动化了一些脚本,导致你的整个网站被封锁。更好的解决办法是联系那个站点并告诉你的问题。如果问题是真的,他们可以考虑解除阻塞

    有这样的问题(with)。,只要重新加载PHP,一切就开始工作了

    对于Centos 6和Centos 7:

    service php-fpm restart 
    

    我现在做的是将GET数据提交到$s['url'],可以用GET提供的数据替换url中的硬编码地址。但是请确保有一个shchema,如果没有,请在那里添加一个默认的“http://”。使用parse_url()函数以确保URL中存在架构。远程地址是否可访问?DNS是否解析?是。事实上,我当前正在访问同一服务器上的URL。我遇到了相同的错误,但我认为这是由于“etc/resolf.conf”和“etc/hosts”中的服务器配置不正确造成的答案是更正你的
    /etc/hosts
    。确保url指向它应该指向的位置(通常是localhost)。我的错误非常愚蠢……localhost的拼写是错误的:)我不需要检索内容,只需提交GET数据。这是否特别重要,还是可以?例如,file\u GET\u contents(“);没关系,您可以忽略file_get_contents的返回值。我想是的。我会试试看,然后再来back@Rob-elias是对的,你可以忽略返回值。我用粗糙的
    fsockopen()更新了我的答案
    一种手动发送HTTP请求头的方法,如果您担心生成完整HTTP请求的开销(除非返回该URL,否则这可能不会太大)