您的位置:

如何使用php解析纯真ip,php 解析

本文目录一览:

PHP如何获取用户的真实IP?

php获取用户真实ip的方法:

方法1:

//获取REMOTE_ADDR属性,直接可以得到ip

$ip = $_SERVER["REMOTE_ADDR"];

echo $ip;

方法2:

//从Server中获取HTTP_VIA,如果获取到就用HTTP_X_FORWARDED_FOR的值替换,如果获取不到就取REMOTE_ADDR的值。

$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] :

$_SERVER["REMOTE_ADDR"];

$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];

echo $user_IP;

方法3:

function getRealIp()

{

$ip=false; //初始化ip为false

if(!empty($_SERVER["HTTP_CLIENT_IP"])){ //如果HTTP_CLIENT_IP不为空

$ip = $_SERVER["HTTP_CLIENT_IP"]; //获取HTTP_CLIENT_IP的值

}

if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //如果HTTP_X_FORWARDED_FOR不为空

$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);

//把HTTP_X_FORWARDED_FOR的值用,分割后存放数组ips

if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }//遍历处理

for ($i = 0; $i count($ips); $i++) {

if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {

$ip = $ips[$i]; //获得真实ip

break;

}

}

}

return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);

}

echo getRealIp();

php 获取真实IP,区分代理IP

使用php获取IP的方法能找到很多。

function getIp(){

if (getenv("HTTP_CLIENT_IP") strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

$ip = getenv("HTTP_CLIENT_IP");

else if (getenv("HTTP_X_FORWARDED_FOR") strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

else if (getenv("REMOTE_ADDR") strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

$ip = getenv("REMOTE_ADDR");

else if (isset($_SERVER['REMOTE_ADDR']) $_SERVER['REMOTE_ADDR'] strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

$ip = $_SERVER['REMOTE_ADDR'];

else

$ip = "unknown";

return($ip);

}

对这段代码进行解释,这里用到了两个函数,getenv()和strcasecmp(),前一个函数获取得系统的环境变量,如果能取到值,则返回该值,不能则返回false.

$_SERVER是服务器超级全局变量数组,用$_SERVER['REMOTE_ADDR']同样可以获取到客户端的IP地址.二者的区别在于,getenv不支持IIS的isapi方式运行的php.

strcasecmp(string1,string2)字符串函数的用法是把string1和string2进行比较,如果相等返回0,如果string1大于string2,返回大于0的数,小于则返回小于0的数.

函数先使用客户IP,如果不成立尝试用代理的方法,如果不行,再使用REMOTE_ADDR。

php怎样获取用户真实ip?

获取客户端ip其实不是个简单的事儿,因为存在IP欺骗,和代理问题,所以获取客户端的IP的真实性会打折扣的,不能百分百准确。但是我们还是可以尽量写一些比较完善的获取客户端真正ip方法。使用php获取IP的方法能有很多,我简单给个例子:

?php

function getip() { 

     $unknown = 'unknown'; 

     if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])  $_SERVER['HTTP_X_FORWARDED_FOR']  strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){ 

         $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 

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

         $ip = $_SERVER['REMOTE_ADDR']; 

     } 

     /**

      * 处理多层代理的情况

      * 或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;

      */

     if (false !== strpos($ip, ',')) $ip = reset(explode(',', $ip)); 

     return $ip; 

?

1、没有使用代理的情况

REMOTE_ADDR = 客户端IP

    HTTP_X_FORWARDED_FOR = 没数值或不显示

2、使用透明代理的情况

REMOTE_ADDR = 最后一个代理服务器 IP

    HTTP_X_FORWARDED_FOR = 客户端真实 IP (经过多个代理服务器时,这个值类似:        221.5.252.160, 203.98.182.163, 203.129.72.215)

    这类代理服务器还是将客户端真实的IP发送给了访问对象,无法达到隐藏真实身份的目的.

3、使用普通的匿名代理

REMOTE_ADDR = 最后一个代理服务器 IP

    HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:        203.98.182.163, 203.98.182.163, 203.129.72.215)

    这种情况下隐藏了客户端的真实IP,但是向访问对象透露了客户端是使用代理服务器访问它        们的.

4、使用欺骗性代理服务器

REMOTE_ADDR = 代理服务器 IP

    HTTP_X_FORWARDED_FOR = 随机的 IP(经过多个代理服务器时,这个值类似:                    220.4.251.159, 203.98.182.163, 203.129.72.215)

    这种情况下同样透露了客户端是使用了代理服务器,但编造了一个虚假的随机                            IP(220.4.251.159)代替客户端的真实IP来欺骗它.

5、使用高级匿名代理服务器

REMOTE_ADDR = 代理服务器 IP

    HTTP_X_FORWARDED_FOR = 没数值或不显示,也可能是unknown

php获取本机真实IP地址实例代码

本文实例为大家分享了php获取本机真实IP地址实例代码,供大家参考。

主要是获取操作系统为win2000/xp、win7的本机IP真实地址,和获取操作系统为linux类型的本机IP真实地址,具体内容如下

function

getLocalIP()

{

$preg

=

"/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/";

//获取操作系统为win2000/xp、win7的本机IP真实地址

exec("ipconfig",

$out,

$stats);

if

(!empty($out))

{

foreach

($out

AS

$row)

{

if

(strstr($row,

"IP")

strstr($row,

":")

!strstr($row,

"IPv6"))

{

$tmpIp

=

explode(":",

$row);

if

(preg_match($preg,

trim($tmpIp[1])))

{

return

trim($tmpIp[1]);

}

}

}

}

//获取操作系统为linux类型的本机IP真实地址

exec("ifconfig",

$out,

$stats);

if

(!empty($out))

{

if

(isset($out[1])

strstr($out[1],

'addr:'))

{

$tmpArray

=

explode(":",

$out[1]);

$tmpIp

=

explode("

",

$tmpArray[1]);

if

(preg_match($preg,

trim($tmpIp[0])))

{

return

trim($tmpIp[0]);

}

}

}

return

'127.0.0.1';

}

以上就是本文的全部内容,希望对大家的学习有所帮助。

PHP如何获取真实IP地址

//最简单获取ip地址代码一句实例

$reIP=$_SERVER["REMOTE_ADDR"];

echo $reIP;

//

//php教程获取ip的算法

if(getenv(HTTP_CLIENT_IP)) {

$onlineip = getenv(HTTP_CLIENT_IP);

} elseif(getenv(HTTP_X_FORWARDED_FOR)) {

$onlineip = getenv(HTTP_X_FORWARDED_FOR);

} elseif(getenv(REMOTE_ADDR)) {

$onlineip = getenv(REMOTE_ADDR);

} else {

$onlineip = $HTTP_SERVER_VARS[REMOTE_ADDR];

}

echo $onlineip;

//可以分出内网与外网站ip地址获取程序

function getip_out(){

$ip=false;

if(!empty($_SERVER["HTTP_CLIENT_IP"])){

$ip = $_SERVER["HTTP_CLIENT_IP"];

}

if (!empty($_SERVER[HTTP_X_FORWARDED_FOR])) {

$ips教程 = explode (", ", $_SERVER[HTTP_X_FORWARDED_FOR]);

if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }

for ($i = 0; $i count($ips); $i++) {

if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {

$ip = $ips[$i];

break;

}

}

}

return ($ip ? $ip : $_SERVER[REMOTE_ADDR]);

}

echo getip_out();

//php获取ip的算法,用了?号表达式来处理

$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];

$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];

希望会对你有所帮助

PHP如何获取客户端真实IP

.X.XXX.XXX系列IP,而这个函数获取的是局域网网关出口的IP地址,如果访问者使用代理服务器,将不获取代理服务器的IP,而是获取访问者网关的真实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地址。