function GetIP(){
if (getenv(“HTTP_CLIENT_IP”) && strcasecmp(getenv(“HTTP_CLIENT_IP”), “unknown”)) //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);
}
网上查到的最多的就是这段经典的代码,可是网上都没有什么注释,尤其是strcasecmp的用法,书上网上都不甚详细。一个ip地址和字符串“unknown”比较的值,好像应该是负的吧?strcasecmp是比较ASCII码的值,具体怎么比呢?所有字符的值相加,比较?数字的ASCII值好像比字符小。http://hi.baidu.com/lampcool/blog/item/029ca5f1eaf18ec10a46e0bf.html
参考这篇博文,这段代码还是不是很好理解。
求明白的高手给予提示!
这样不能保证一定能取到ip地址。。我们做的取ip地址的代码都是lz那样的。感觉lz的代码有点问题。
function GetIP()
{
if(!empty($_SERVER["HTTP_CLIENT_IP"]))
$cip = $_SERVER["HTTP_CLIENT_IP"];
else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if(!empty($_SERVER["REMOTE_ADDR"]))
$cip = $_SERVER["REMOTE_ADDR"];
else
$cip = "unknown";
return $cip;
}
?>
strcasecmp是忽略大小写的比较:am 和AM,Am的strcasecmp的结果都是true.
int strcasecmp ( string str1, string str2 )
返回值 < 0 表示 str1小于str2
返回值 > 0 表示 str1大于str2
返回值 = 0 表示 str1等于str2if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");$ip 被赋值的条件是:
getenv("HTTP_CLIENT_IP") 不为空 和 getenv("HTTP_CLIENT_IP") 不等于 "unknown"其次,所有涉及到得服务器环境都是前人的经验总结,不必深究
要是取到ip,数字比"u"小,就一定判断是假了
#2,strcasecmp返回只要不为0,都表示两个串不想等,对于if来说就是true,上面这段话是不是你理解错了?0->false,1->true,-1->true.