php取得服务器IP地址[非代理]的方法

发布时间:2020-08-07编辑:脚本学堂
本文介绍下,在php中取得服务器Ip地址的方法,非代理的情况,有需要的朋友参考下。

在php中,一般通过$_SERVER['HTTP_HOST']来活得URL中网站的域名或者IP地址

php手册中的解释:

“HTTP_HOST”
当前请求的 Host: 头信息的内容。

在一些常见的php框架中,如PFC3和FLEA也是基于该预定义变量。

不过最近遇到一个问题,不能准确得到服务器的Ip地址。
原因:$_SERVER['HTTP_HOST']在客户的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。
由于客户的公司通过一台服务器连接至因特网,而程序所在的服务器,是通过域名映射出来的,也就是中间有个“代理”的过程。

因此$_SERVER['HTTP_HOST']在这样的环境里,取得的值总是程序所在的服务器在其局域网内的ip值。

最后在symfony框架中找到替代的实现方法:

 

复制代码 代码示例:
$host = $_SERVER['HTTP_HOST'];
 

替换成:
 

复制代码 代码示例:
$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');

然后,问题就解决了,可以获得真实的IP地址了。