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("HTTP_CLIENT_IP")
getenv("HTTP_X_FORWARDED_FOR")我百度了下getenv里没有这2个参数啊。
还有strcasecmp是不是返回0 1 -1吗 这里怎么理解?
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("HTTP_CLIENT_IP")
getenv("HTTP_X_FORWARDED_FOR")我百度了下getenv里没有这2个参数啊。
还有strcasecmp是不是返回0 1 -1吗 这里怎么理解?
HTTP_CLIENT_IP 代理端的IP HTTP_X_FORWARDED_FOR 用户在哪个IP使用的代理为什么不用 == 来做比较,因为比较的两个对象类型要严格相等才能返回true.
我们做个实验:echo 0 == "CSDN" 这里的结果显然不是我们想要的,他返回的是 true,所以显然简单的==比较是不可靠的。Strcasecmp 的作用是比较两个字符是否相等.注意是二进制比较 也就是一个字母一个字母.碰到不同的地方它就会停下来并且返回结果.
前者比后者大,则返回大于0的整数;如果前者比后者小,则返回小于0的整数;如果两者相等,则返回0.
用 Strcasecmp 就可以取得 -3 为什么是-3 当比较第一个数的时候 1 和4 就不相同了 所以返回了 -3.
用Strcasecmp进行字符串的比较就能够避免一些我们不愿意看到的错误发生.所以在手册上说是二进制安全比较字符串。
echo Strcasecmp(10,4);//-3
if (strcasecmp('127.0.0.1', "unknown")){
echo '127.0.0.1';
}判断返回1 的话那么就是获取到了IP地址.所以将IP地址 赋值给变量
$ip = getenv("HTTP_CLIENT_IP");例子2:
if (strcasecmp('unknown', "unknown")){
echo '127.0.0.1';
}else{
echo '没有IP地址继续操作...';
}
如果 getenv("HTTP_CLIENT_IP") 返回的结果是 unknown(返回判断结果是0 if 将判断为假) 那么将继续循环下面的操作.
能看明白了?
==>
strtolower(getenv("HTTP_CLIENT_IP")) != "unknown"
不知道有没有记错。