php 获取本机外网/公网IP的代码


Posted in PHP onMay 09, 2010

大家一般都是用$_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; 
}
PHP 相关文章推荐
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
ThinkPHP开发框架函数详解:C方法
Aug 14 PHP
PHP执行linux命令常用函数汇总
Feb 02 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
Laravel实现autoload方法详解
May 07 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 #PHP
php ob_flush,flush在ie中缓冲无效的解决方法
May 09 #PHP
php 各种应用乱码问题的解决方法
May 09 #PHP
php 输出双引号"与单引号'的方法
May 09 #PHP
php for 循环语句使用方法详细说明
May 09 #PHP
php 函数使用方法与函数定义方法
May 09 #PHP
php 获取select下拉列表框的值
May 08 #PHP
You might like
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
php 禁止页面缓存输出
2009/01/07 PHP
PHP 面向对象实现代码
2009/11/11 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
javascript版2048小游戏
2015/03/18 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
2016/04/03 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
[03:20]次级联赛厮杀超职业 现超级兵对拆世纪大战
2014/10/30 DOTA
Python星号*与**用法分析
2018/02/02 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
2019/05/27 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
python对文件的操作方法汇总
2020/02/28 Python
python输出数学符号实例
2020/05/11 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
学生就业推荐信
2013/11/13 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
逃课检讨书范文
2015/05/06 职场文书
公积金具结保证书
2015/05/11 职场文书
毕业赠语大全
2015/06/23 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
股权投资协议书
2016/03/23 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python