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 相关文章推荐
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
Feb 15 PHP
实用函数10
Nov 08 PHP
php入门小知识
Mar 24 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
php下载远程大文件(获取远程文件大小)的实例
Jun 17 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
laravel框架添加数据,显示数据,返回成功值的方法
Oct 11 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&MYSQL服务器配置说明
2006/10/09 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
Python中设置变量作为默认值时容易遇到的错误
2015/04/03 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Python imread、newaxis用法详解
2019/11/04 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
商务日语毕业生自荐信
2013/11/23 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2019消防宣传标语!
2019/07/10 职场文书
flex弹性布局详解
2022/03/20 HTML / CSS