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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
php上传文件并显示上传进度的方法
Mar 24 PHP
深入剖析PHP中printf()函数格式化使用
May 23 PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
如何通过PHP实现Des加密算法代码实例
May 09 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插入排序实现代码
2013/04/04 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
始终在屏幕中间显示Div的代码(css+js)
2011/03/10 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
Vue组件之单向数据流的解决方法
2018/11/10 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
python pandas 如何替换某列的一个值
2018/06/09 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
Django之模板层的实现代码
2019/09/09 Python
Python创建数字列表的示例
2019/11/28 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
详解python 内存优化
2020/08/17 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
网站编辑求职信
2013/10/17 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
十佳护士先进事迹
2014/05/08 职场文书
董事长年会致辞
2015/07/29 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
Vue Element plus使用方法梳理
2022/12/24 Vue.js