如何在PHP中识别服务器IP地址
如何在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
问题的原因是在某些共享主机上,使用$_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地址的问题。