php 获得访问者的IP
2024-08-23 09:20:32
<?php
$user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"]; echo $user_IP;
?>
【PHP获取访问者IP】的三种方法以及详解
Q:三个IP地址的获取有什么区别?
$_SERVER['REMOTE_ADDR']; $_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
A:区别如下 $_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP $_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造) $_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)
$_SERVER['REMOTE_ADDR']; $_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
A:区别如下 $_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP $_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造) $_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造)
方法一:$_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;
}
方法二:利用curl依靠第三方来获取,如http://www.ip138.com/ip2city.asp
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];
}
最新文章
- IOS原生地图与高德地图
- solr 安装
- is_null, empty, isset, unset对比
- Android-开发工具
- Android加载SO库UnsatisfiedLinkError错误的原因及解决方案
- openerp学习笔记 调用工作流
- 编写爬虫(spider)的预备知识:用java发送HTTP请求
- 1483:[HNOI]2009 梦幻布丁 - BZOJ
- HTML的id,name,class
- hadoop-2.0.0-mr1-cdh4.2.0源码编译总结
- android SlidingTabLayout实现ViewPager页卡滑动效果
- 如何编译tizen源码(图文教程)?
- Python基础(十一)-面向对象
- bzoj 3611[Heoi2014]大工程 虚树+dp
- JQuery Deferred 对象剖析
- mysql 基础指令/命令
- Centos下安装Python的问题汇总
- java 中的引用数据类型
- ionic4+angular6 混合移动开发 capacitor cordova
- 翻译:ZooKeeper OverView
热门文章
- 【OF框架】缓存Session/Cookies/Cache代码调用api,切换缓存到Redis
- Visual Studio C# 利用git和github协同开发时产生冲突的解决办
- SpringBoot项目的异常
- js onclick事件传参
- tomcate环境搭建
- 01_第一次如何上传GitHub(转)Updates were rejected because the tip of your current branch is behind
- LeetCode 317. Shortest Distance from All Buildings
- boost::swap
- centos6.5 安装163yum源
- [bzoj 5332][SDOI2018]旧试题