首页 > 编程 > PHP > 正文

php 获取本机外网-公网IP

2020-03-22 18:50:38
字体:
来源:转载
供稿:网友
大家一般都是用$_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;
}


郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表