PHP获得客户端IP
getenv -- Gets the value of an environment variable, string getenv ( string varname ), Returns the value of the environment variable varname, or FALSE on an error.
- <?php
- // Example use of getenv()
- $ip = getenv ( 'REMOTE_ADDR' );
- // Or simply use a Superglobal ($_SERVER or $_ENV)
- $ip = $_SERVER [ 'REMOTE_ADDR' ];
- ?>
<?php
// Example use of getenv()
$ip = getenv('REMOTE_ADDR');
// Or simply use a Superglobal ($_SERVER or $_ENV)
$ip = $_SERVER['REMOTE_ADDR'];
?>
这是在PHP官方的manual提供的方法。
但是当Web服务器API是ASAPI (IIS)的时候,getenv函数是不起作用的。这种情况下你如果用getenv来取得用户客户端ip的话,得到的将是错误的ip地址。
因此更为安全和准确的方法是尽量避免使用getenv函数。比如可以用以下的函数来获取ip信息:
程序代码
- <?php
- 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 );
- }
- $ip = GetIP();
- echo $ip ;
- ?>
<?php
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);
}
$ip = GetIP();
echo $ip;
?>
运行结果演示
你的IP为: 219.142.31.246