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 相关文章推荐
第六节 访问属性和方法 [6]
Oct 09 PHP
pw的一个放后门的方法分析
Oct 08 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
header跳转和include包含问题详解
Sep 08 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
PHP实现无限分类的实现方法
Nov 14 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
php源码的使用方法讲解
Sep 26 PHP
laravel实现查询最后执行的一条sql语句的方法
Oct 09 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
PHP命令行与定时任务
Apr 01 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设计模式 Command(命令模式)
2011/06/26 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
javascript的document中的动态添加标签实现方法
2016/10/24 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
JS原生数据双向绑定实现代码
2017/08/14 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
解决vue做详情页跳转的时候使用created方法 数据不会更新问题
2020/07/24 Javascript
用vue写一个日历
2020/11/02 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python http接口自动化脚本详解
2018/01/02 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
python skimage 连通性区域检测方法
2018/06/21 Python
示例详解Python3 or Python2 两者之间的差异
2018/08/23 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
班委竞选演讲稿
2014/04/28 职场文书
项目负责人岗位职责
2015/02/15 职场文书