php 获取本机外网/公网IP的代码 |
本文标签:本机外网,公网,IP 大家一般都是用$_SERVER[REMOTE_ADDR]来获取用户IP, 但是如果使用了反向代理的,HTTP头中REMOTE_ADDR就不是用户的地址,反而是上一级代理的地址了 。 经过我的研究有两种方法来获取用户的真实外网IP 。 方法一:curl 复制代码 代码如下: 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]来获取相应的地址 复制代码 代码如下: 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; } |