上个月网站换了Google PageSpeed Service 的加速后, 网站订单系统的获取客户端IP地址都是 Google CDN 加速的IP地址, 而不是真实的客户端IP地址. 在 PHP 官方的 manual 手册里提供的方法是:
<?php
// Example use of getenv()
$ip = getenv('REMOTE_ADDR');
// Or simply use a Superglobal ($_SERVER or $_ENV)
$ip = $_SERVER['REMOTE_ADDR'];
?>
但是官方的这个办法在当Web服务器API是ASAPI (IIS)的时候, 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;
?>
英文 SEO & SEM Journal