页次: 1
示例代码
/** * * @param type $b 如果说false 返回的 字符串 ip, 如果是 true 返回的值 数字 ip * 默认返回 字符串ip */ function get_ip($b = false) { $ans = ''; if(getenv('HTTP_CLIENT_IP')) { $ans = getenv('HTTP_CLIENT_IP'); } elseif ( getenv('HTTP_X_FORWARDED_FOR')) { $ans = getenv('HTTP_X_FORWARDED_FOR'); } elseif ( getenv('REMOTE_ADDR')) { $ans = getenv('REMOTE_ADDR'); } else { $ans = '127.0.0.1'; } if($b) { return ip2long($ans); } else { return $ans; } }
为什么这么写, 这个写法是按照 http 协议来写的。
如果浏览器和服务器中间有中间有代理服务器。
比如服务器的模型是
浏览器用过ngxin反向代理访问apache.
用户把请求给 nginx , nginx 从 apache 哪里获得内容, 返回给 nginx ,nginx 把内容最后给用户。
这样http的头部信息,就会有对个ip信息, 比如 HTTP_X_FORWADEED_FOR。
多个ip信息有个优先级。
ipbbs.net
离线
页次: 1