通过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 相关文章推荐
php程序之die调试法 快速解决错误
Sep 17 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
变量在 PHP7 内部的实现(二)
Dec 21 PHP
php实现的xml操作类
Jan 15 PHP
php排序算法实例分析
Oct 17 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
php的无刷新操作实现方法分析
Feb 28 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
PHP 写文本日志实现代码
2010/05/18 PHP
PHP XML操作的各种方法解析(比较详细)
2010/06/17 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
php中输出json对象的值(实现方法)
2018/03/07 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
javascript中如何处理引号编码"
2013/08/15 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
解决vue 退出动画无效的问题
2020/08/09 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
python里对list中的整数求平均并排序
2014/09/12 Python
Python中用Descriptor实现类级属性(Property)详解
2014/09/18 Python
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
详解Python_shutil模块
2019/03/15 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
一年级班主任寄语
2014/01/19 职场文书
联谊活动策划书
2014/01/26 职场文书
HR求职自荐信范文
2014/06/21 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
个人总结怎么写
2015/02/26 职场文书