通过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速度全攻略
Oct 09 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
php xml文件操作实现代码(二)
Mar 20 PHP
php 自写函数代码 获取关键字 去超链接
Feb 08 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
Aug 06 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
Jan 19 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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导航下拉菜单的实现如此简单
2013/09/22 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
PHP检测用户语言的方法
2015/06/15 PHP
基于PHP制作验证码
2016/10/12 PHP
PHP会话控制实例分析
2016/12/24 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
jQuery 删除或是清空某个HTML元素示例
2014/08/04 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
JavaScript实现图片滑动切换的代码示例分享
2016/03/06 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
Python实现简单拆分PDF文件的方法
2015/07/30 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Flask框架WTForm表单用法示例
2018/07/20 Python
python命令 -u参数用法解析
2019/10/24 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
10个顶级Python实用库推荐
2021/03/04 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
入党综合考察材料
2014/06/02 职场文书
计算机实训报告总结
2014/11/05 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS