大家一般都是用$_SERVER['REMOTE_ADDR']来获取用户IP, 但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了。 经过我的研究有两种方法来获取用户的真实外网IP。 方法一:curl <div class="codetitle"><a style="CURSOR: pointer" data="73878" class="copybut" id="copybut73878" onclick="doCopy('code73878')"> 代码如下:<div class="codebody" id="code73878"> function get_onlineip() { $ch = curl_init('http://www.ip138.com/ip2city.asp'); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $a = curl_exec($ch); preg_match('/[(.*)]/',$a,$ip); return $ip[1]; } 方法二:$_SERVER['HTTP_X_FORWARDED_FOR']来获取相应的地址 <div class="codetitle"><a style="CURSOR: pointer" data="65592" class="copybut" id="copybut65592" onclick="doCopy('code65592')"> 代码如下:<div class="codebody" id="code65592"> function get_onlineip() { $onlineip = ''; if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'),'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } return $onlineip; }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|