如何在PHP中识别服务器IP地址

17 浏览
0 Comments

如何在PHP中识别服务器IP地址

如何在PHP中识别服务器IP地址?

0
0 Comments

问题的出现原因是用户想要在PHP中识别服务器的IP地址。解决方法是使用$_SERVER['SERVER_ADDR']来获取IP地址。在IIS中,可以尝试使用$_SERVER['LOCAL_ADDR']来获取IP地址。在IIS下,当PHP作为CGI模块运行时,$_SERVER['LOCAL_ADDR']才可用。如果通过localhost连接,会返回::1。如果通过服务器的名称或IP连接,会返回真实的IP地址。 ::1可能是一个IP6地址。即使我的网络不支持IPV6,我的服务器(Windows 7机器)也会报告它的IP地址为::1,即IPV6的环回地址。

0
0 Comments

如何在PHP中识别服务器IP地址

如果您使用的是PHP版本5.3或更高版本,您可以使用以下代码来识别服务器IP地址:

$host= gethostname();
$ip = gethostbyname($host);

这个方法适用于在独立脚本中运行,而不是通过Web服务器运行的情况。

这是唯一可以在命令行中使用的解决方案。

这个方法应该不会出现问题。本地主机名应该在/etc/hosts文件中,并且速度很快,尽管可能只是127.0.0.1。如果它确实需要调用DNS,那么它会很慢,就像你说的那样。

+1 但是有一个问题..我在本地服务器上使用xampp尝试了一下,它返回的是192.168等,但是应该是127.0.0.1,对吗?

这个方法对我来说有效,但是一些机器显示的是域名。如何解决这个问题?

对我来说,这个方法返回的是127.0.0.1。我怎么才能得到公共IP地址?比如stackoverflow.com = 151.101.193.69

0
0 Comments

问题的原因是在某些共享主机上,使用$_SERVER['SERVER_ADDR']获取的服务器IP地址可能返回::1,这取决于在Web服务器前面使用的负载均衡器。在这种情况下,需要使用X-Forwarded-For头部来获取正确的服务器IP地址。

解决方法是在获取服务器IP地址时,同时使用X-Forwarded-For头部。以下是一个示例代码:

$serverIp = $_SERVER['SERVER_ADDR'];
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $forwardedIp = $_SERVER['HTTP_X_FORWARDED_FOR'];
    $serverIp = explode(',', $forwardedIp)[0];
}
echo $serverIp;

这样就可以正确获取到服务器的IP地址,无论是通过$_SERVER['SERVER_ADDR']还是通过X-Forwarded-For头部。

需要注意的是,这种方法也适用于通过CLI方式调用的情况。而且对于与PHP-FPM关联的Web服务器(如nginx、apache),这种方法也适用。但是对于MySQL客户端主机规范(用户),这种方法不适用。

总结一下,通过使用X-Forwarded-For头部,可以解决在某些情况下无法正确获取服务器IP地址的问题。

0