php获取客户端ip(怎么获取对端ip地址)
很多朋友对于php获取客户端ip和怎么获取对端ip地址不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
PHP如何获取客户端真实IP
如果将这个函数应用到限IP访问的网页中,别人即使通过限IP访问段中的代理服务器,也不能访问该页面。
下面提供一个函数:<?php
//定义一个函数getIP()
function getIP(){global$ip;
if(getenv("HTTP_CLIENT_IP"))
$ip= getenv("HTTP_CLIENT_IP");
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip= getenv("HTTP_X_FORWARDED_FOR");
else if(getenv("REMOTE_ADDR"))
$ip= getenv("REMOTE_ADDR");else$ip="Unknow";
return$ip;}
//使用方法:
echo getIP();?>
getenv("REMOTE_ADDR")用来取得客户端的 IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP地址,而不是真正的客户端 IP地址。要想透过代理服务器取得客户端的真实 IP地址,就要使用 getenv("HTTP_X_FORWARDED_FOR")来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR")取到的值将是空的。
else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip= getenv("HTTP_X_FORWARDED_FOR");
表示如果getenv("HTTP_X_FORWARDED_FOR")取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR")取到的真实IP值。
如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip= getenv("HTTP_X_FORWARDED_FOR");这一行语句。
这种情况下已经确认客户端没有使用代理服务器,从而通过
else if(getenv("REMOTE_ADDR"))
这两行语句获得客户端的IP地址也是真实的IP地址。
如何使用PHP获取客户端及服务器端IP的封装类
本文实例讲述了PHP获取客户端及服务器端IP的封装类。分享给大家供大家参考,具体如下:
客户端IP相关的变量:
1.$_SERVER['REMOTE_ADDR'];客户端IP,有可能是用户的IP,也有可能是代理的IP。
2.$_SERVER['HTTP_CLIENT_IP'];代理端的IP,可能存在,可伪造。
3.$_SERVER['HTTP_X_FORWARDED_FOR'];用户是在哪个IP使用的代理,可能存在,可以伪造。
服务器端IP相关的变量:
1.$_SERVER["SERVER_NAME"],需要使用函数gethostbyname()获得。这个变量无论在服务器端还是客户端均能正确显示。
2.$_SERVER["SERVER_ADDR"],在服务器端测试:127.0.0.1(这个与httpd.conf中BindAddress的设置值相关)。在客户端测试结果正确。
类如下:
class getIP{
function clientIP(){
$cIP= getenv('REMOTE_ADDR');
$cIP1= getenv('HTTP_X_FORWARDED_FOR');
$cIP2= getenv('HTTP_CLIENT_IP');
$cIP1?$cIP=$cIP1: null;
$cIP2?$cIP=$cIP2: null;
return$cIP;
}
function serverIP(){
return gethostbyname($_SERVER["SERVER_NAME"]);
}
}
$getIP= new getIP();
$clientIp= getIP::clientIP();
$serverIp= getIP::serverIP();
echo'Client IP is',$clientIp,'<br/>';
echo'Server IP is',$serverIp,'<br/>';
php获取IP地址的三个函数区别
以下资料供参考:
1、REMOTE_ADDR浏览当前页面的用户计算机的ip地址
2、HTTP_X_FORWARDED_FOR浏览当前页面的用户计算机的网关
3.HTTP_CLIENT_IP客户端的ip
在PHP中使用 REMOTE_ADDR来取得客户端的 IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP地址,而不是真正的客户端 IP地址。
要想透过代理服务器取得客户端的真实 IP地址,就要使用 HTTP_X_FORWARDED_FOR来读取。
不过要注意的事,并不是每个代理服务器都能用 HTTP_X_FORWARDED_FOR来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。
还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么HTTP_X_FORWARDED_FOR取到的值将是空的。
关于php获取客户端ip到此分享完毕,希望能帮助到您。