通过PHP实现获取访问用户IP


Posted in PHP onMay 09, 2020

在php中自带了一个非常的简单的获取IP地址的全局变量,很多初学都获取IP都使用它了,但是对于这些我们一般用法是满足了,但是对于要求高精度这个函数还是不行的。

这个是最简单的方法,对于开了透明代理之类的是没有办法的,如果内网访问也不能读取正确的外网IP,不过很省力就是了:

$ip = $_SERVER["REMOTE_ADDR"];

搞定~

上面方法用来取得客户端的 IP 地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址

要想透过代理服务器取得客户端的真实 IP 地址,就要使用 getenv("HTTP_X_FORWARDED_FOR") 来读取。
但是如果客户端没有通过代理服务器来访问,那么用getenv("HTTP_X_FORWARDED_FOR") 取到的值将是空的。

else if(getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");

表示如果getenv("HTTP_X_FORWARDED_FOR") 取到的值存在不为空(即客户端使用代理服务器的情况下),则变量$ip等于getenv("HTTP_X_FORWARDED_FOR") 取到的真实IP值。

如果上面的else if(getenv("HTTP_X_FORWARDED_FOR"))取得的值为空(即没有使用代理服务器),则不会执行下面的$ip = getenv("HTTP_X_FORWARDED_FOR");这一行语句。

这种情况下已经确认客户端没有使用代理服务器,从而通过

else if(getenv("REMOTE_ADDR"))
$ip = getenv("REMOTE_ADDR");

这两行语句获得客户端的IP地址也是真实的IP地址,根据经验得出

function getIP()
{
  static $realip;
  if (isset($_SERVER)){
    if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
      $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
      $realip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
      $realip = $_SERVER["REMOTE_ADDR"];
    }
  } else {
    if (getenv("HTTP_X_FORWARDED_FOR")){
      $realip = getenv("HTTP_X_FORWARDED_FOR");
    } else if (getenv("HTTP_CLIENT_IP")) {
      $realip = getenv("HTTP_CLIENT_IP");
    } else {
      $realip = getenv("REMOTE_ADDR");
    } 
  }
  return $realip;
}

另外如果我们想获取更精准的使用第三方是一个不错的方法哦

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];
 }

这样不管理代理还是什么都可以判断IP地址哦

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
2.PHP入门
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
php删除数组元素示例分享
Feb 17 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
PHP简单实现“相关文章推荐”功能的方法
Jul 19 PHP
php中get_cfg_var()和ini_get()的用法及区别
Mar 04 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
php smtp实现发送邮件功能
Jun 22 PHP
如何通过PHP实现Des加密算法代码实例
May 09 #PHP
php变量与字符串的增删改查操作示例
May 07 #PHP
PHP数组与字符串互相转换实例
May 05 #PHP
禁止直接访问php文件代码分享
May 05 #PHP
php将字符串转换为数组实例讲解
May 05 #PHP
php输出形式实例整理
May 05 #PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 #PHP
You might like
怎样辨别一杯好咖啡
2021/03/03 新手入门
浅析ThinkPHP中execute和query方法的区别
2014/06/13 PHP
Laravel框架自定义验证过程实例分析
2019/02/01 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
jQuery探测位置的提示弹窗(toolTip box)详细解析
2013/11/14 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
vue cli 3.x 项目部署到 github pages的方法
2019/04/17 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
python自动格式化json文件的方法
2015/03/11 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python中with及contextlib的用法详解
2017/06/08 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Django使用中间件解决前后端同源策略问题
2019/09/02 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
2020/04/15 Python
对python中list的五种查找方法说明
2020/07/13 Python
python中spy++的使用超详细教程
2021/01/29 Python
经典商业广告词
2014/03/13 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
功夫熊猫观后感
2015/06/10 职场文书
整脏治乱工作简报
2015/07/21 职场文书
在Python中如何使用yield
2021/06/07 Python
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript