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读MYSQL中文乱码的解决方法
Dec 17 PHP
分享10段PHP常用代码
Nov 11 PHP
如何使用微信公众平台开发模式实现多客服
Jan 06 PHP
Yii2如何批量添加数据
May 17 PHP
php7 安装yar 生成docker镜像
May 09 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
php实现留言板功能(会话控制)
May 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
php进行md5加密简单实例方法
Sep 19 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP将进程作为守护进程的方法
2015/03/19 PHP
WampServer搭建php环境时遇到的问题汇总
2015/07/23 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
javascript中select下拉框的用法总结
2016/01/07 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
基于pip install django失败时的解决方法
2018/06/12 Python
python 解压pkl文件的方法
2018/10/25 Python
python 两个数据库postgresql对比
2019/10/21 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
PyQt5实现画布小程序
2020/05/30 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
反腐倡廉剖析材料
2014/09/30 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
Python基础之变量的相关知识总结
2021/06/23 Python