上个月网站换了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; ?>