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 相关文章推荐
数字转英文
Dec 06 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
php获取当前时间的毫秒数的方法
Jan 26 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
Feb 02 PHP
php数字每三位加逗号的功能函数
Oct 22 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
Oct 08 PHP
PHP构造二叉树算法示例
Jun 21 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
PHP中有关长整数的一些操作教程
Sep 11 PHP
PHP常用函数之格式化时间操作示例
Oct 21 PHP
php输出形式实例整理
May 05 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
php自动加载方式集合
2016/04/04 PHP
各种快递查询--Api接口
2016/04/26 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
javascript基本类型详解
2014/11/28 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
你应该知道的python列表去重方法
2017/01/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
python读取指定字节长度的文本方法
2019/08/27 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
python文件操作seek()偏移量,读取指正到指定位置操作
2020/07/05 Python
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
毕业学生推荐信
2013/12/01 职场文书
入股协议书范本
2014/04/14 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
js中Object.create实例用法详解
2021/10/05 Javascript
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript