PHP $_SERVER['REMOTE_ADDR']取得的竟然是服务器IP

PHP $_SERVER['REMOTE_ADDR']取得的竟然是服务器IP,第1张

function ip()

{

if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown'))

{

$ip = getenv('HTTP_CLIENT_IP');

}

elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))

{

$ip = getenv('HTTP_X_FORWARDED_FOR');

}

elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown'))

{

$ip = getenv('REMOTE_ADDR');

}

elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))

{

$ip = $_SERVER['REMOTE_ADDR'];

}

return preg_match("/[\d\]{7,15}/", $ip, $matches) $matches[0] : 'unknown';

}

function real_server_ip(){

static $serverip = NULL;

if ($serverip !== NULL){

return $serverip;

}

if (isset($_SERVER)){

if (isset($_SERVER['SERVER_ADDR'])){

$serverip = $_SERVER['SERVER_ADDR'];

}

else{

$serverip = '0000';

}

}

else{

$serverip = getenv('SERVER_ADDR');

}

return $serverip;

}

这个跟你的路由设置和访问方式有关。

假设你的服务端在1010501,公网IP都是8888。

假设你的客户端在 101050100-199,出口公网IP是4444

如果你的客户端以公网的形式访问,如http://8888/ipphp,则服务端获得IP都是4444。

反之以内网的形式访问,如http://1010501/ipphp,获得的IP就是1010501XX。

解决的办法,要么就是使用内网地址访问,要么使用设置一下路由,指定101050100-199访问的话,不走公网,走10网段。

ip地址分 IPv4和IPV6两个版本。

127001或者19216801之类的,属于IPV4的格式

127001转换为IPv6就是 ::1

IPv6具体的格式写法,你搜索一下了解一下。

另外 ,服务端获取ip地址,是相对的。比如你在局域网内建一个服务器,在程序里获取的ip地址,就是客户端在局域网的ip  ,一般是类似 1921680101 之类的,大公司的话可能  10xxx 

局域网的ip地址,可以直接在网络适配器上看到

而在inter网,也就是大网络上,服务端获取的ip地址,是你的连网设备获取到的公网ip ,一般一个局域网内的主机,相对于因特网上的服务器,显示的都是公网地址。

公网ip没有在本机电脑上直接显示。会显示在路由或者连网设备上。也可以通过百度搜索 ip地址,会显示你的公网ip

所以,假设一个局域网内,有两台电脑同时访问一个网上的服务器,服务器是没办法给两台电脑区分开ip地址的,显示的是一样的。只是可能得到的设备信息不一样(如:浏览器的useragent)

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » PHP $_SERVER['REMOTE_ADDR']取得的竟然是服务器IP

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情