Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “如何打印”;“公众”;您所在网站的IP地址?_Php_Ip_Host - Fatal编程技术网

Php “如何打印”;“公众”;您所在网站的IP地址?

Php “如何打印”;“公众”;您所在网站的IP地址?,php,ip,host,Php,Ip,Host,到目前为止,我已经尝试: echo gethostbyname(gethostname()) 但这给了我“本地”IP(不确定这是否是正确的术语)127.0.0.1,而我想要“公共”IP地址 例如,对于stackoverflow.com网站,我在使用该网站服务时获得151.101.193.69。。。这就是我要找的。gethostbyname(“example.com”)返回指定服务器/域的IPv4 关于这方面的更多信息: 因此,要获取服务器的外部IP,必须指定域名,因为gethostname()将

到目前为止,我已经尝试:

echo gethostbyname(gethostname())

但这给了我“本地”IP(不确定这是否是正确的术语)
127.0.0.1
,而我想要“公共”IP地址

例如,对于stackoverflow.com网站,我在使用该网站服务时获得
151.101.193.69
。。。这就是我要找的。

gethostbyname(“example.com”)返回指定服务器/域的IPv4

关于这方面的更多信息:

因此,要获取服务器的外部IP,必须指定域名,因为
gethostname()
将返回本地IP地址使用此代码

function getIPAddress() {  
 //whether ip is from the share internet
 if(!empty($_SERVER['HTTP_CLIENT_IP'])) {  
            $ip = $_SERVER['HTTP_CLIENT_IP'];  
    }  
 //whether ip is from the proxy 
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {  
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];  
 }  
//whether ip is from the remote address 
else{  
         $ip = $_SERVER['REMOTE_ADDR'];  
 }  
 return $ip;  

}

您必须连接到另一台服务器以确定其IP地址,除非在配置中的某个位置对其进行了硬编码。如果您试图获取我公司网站的公共IP,您将得到不同的答案,具体取决于一天中的时间、国家和一系列其他内容,因为我们支持Cloudflare。但一般来说,您可以查找站点的A或CNAME记录,这可能会让您了解一些您正在查找的内容。但我也会查询公共DNS服务器,而不是内部DNS服务器。嗯,我明白了,所以最好调用第三方API并打印输出?我想这真的取决于你在做什么。对于我的一个客户机,当我将VPN接入他们的网络时,他们服务器的IP从公共地址变为专用的10.x.x.x地址。然而,这是一种边缘情况。在这种情况下,要么使用API,要么使用DNS查找。对于后者,我没有尝试过,但根据文档中的注释,如果在域名后加上句点,它将使用机器的DNS而不是可能的主机文件<代码>gethostbyname(gethostname()。。。)
我从未尝试过这个方法,但它很有意义…如果您想要客户端Ip地址。。。不,他们不想那样。另外,如果您仔细阅读OP的问题,您会发现他们已经尝试了
gethostbyname()
。顺便说一句,我建议不要使用W3傻瓜作为参考。这给了我
127.0.0.1
-我正在寻找我实际访问的网站的“公共”IP。就像你在一个网站上,上面写着“我们网站的公共IP是X”对不起,我误解了这个问题。我对它进行了编辑并提供了进一步的解释。@Drewdavid您必须指定域名,因为gethostname()将返回本地IP地址