php判断IP地址是否在多个IP段内


Posted in PHP onAugust 18, 2020

本文实例为大家分享了php判断IP地址是否在多个IP段内的具体代码,供大家参考,具体内容如下

IP.class.php

<?php
 
class Ip {
  /**
   * 取IP
   * @return string
   */
  public static function get() {
    if ($_SERVER['HTTP_CLIENT_IP'] && $_SERVER['HTTP_CLIENT_IP']!='unknown') {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
      } elseif ($_SERVER['HTTP_X_FORWARDED_FOR'] && $_SERVER['HTTP_X_FORWARDED_FOR']!='unknown') {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
      } else {
        $ip = $_SERVER['REMOTE_ADDR'];
      }
      return $ip;
  }
 
  /**
   * IP转成整形数值
   * @param string $ip IP
   * @return int
   */
  public static function ipToInt($ip) {
    $ips = explode('.',$ip);
    if (count($ips)==4) {
      $int = $ips[0]*256*256*256+$ips[1]*256*256+$ips[2]*256+$ips[3]; //根据IP,a,b,c类进行计算
    } else {
      //throw new Exception('ip is error');
      Tool::Alert('IP地址存在错误...'); //一个工具类,弹出提示信息
    }
    return $int;
  }
 
  /**
   * 判断IP是否在一个IP段内
   * @param string $startIp 开始IP
   * @param string $endIp 结束IP
   * @param string $ip IP
   * @return bool
   */
  public static function isIn($startIp, $endIp, $ip) {
    $start = Ip::ipToInt($startIp);
    $end = Ip::ipToInt($endIp);
    $ipInt = Ip::ipToInt($ip);
    $result = false;
    if ($ipInt>=$start && $ipInt<=$end) {
      $result = true;
    }
    return $result;
  }
 
}
 
?>

IpRang.class.php

<?php
 
//将不同的IP段存储到数组中..
 
$iprang=array(
  array('222.243.159.1','222.243.159.255'),
  array('10.1.1.1','10.1.1.255')
);
?>

test.php

<?php
 
require_once 'Tool.class.php'; //工具类
require_once 'IP.class.php'; //IP类
require_once 'IpRang.class.php'; //IP段范围
 
$ip = IP::get(); //获取IP地址
$tag='1';
foreach($iprang as $key => $value){
 if(!IP::isIn($value[0], $value[1], $ip)){
  continue;
 }else{
  $tag.=$key;
 }
}
if(mb_strlen($tag,'utf-8')==1){
 echo "<script src='/iplookup/iplookup.php?format=js&ip=".$ip."' type='text/javascript'></script>";//调用新浪IP接口
 echo "<script type='text/javascript'>alert('很遗憾,您所用的设备网络不在某某范围内...\\n".$ip."\\n'+remote_ip_info.province+remote_ip_info.city+remote_ip_info.district); $(\"input[name='submit']\").attr(\"disabled\",true);</script>";
  //弹出提示框,显示IP地址、地址以及将提交按钮置为不可用状态
}
 
?>

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

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(6)
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
PHP操作MongoDB GridFS 存储文件的详解
Jun 20 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
Dec 31 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 PHP
浅谈laravel中的关联查询with的问题
Oct 10 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
Mar 09 PHP
PHP 8新特性简介
Aug 18 #PHP
PHP大文件及断点续传下载实现代码
Aug 18 #PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 #PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
Aug 17 #PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 #PHP
PHP unset函数原理及使用方法解析
Aug 14 #PHP
PHP常量及变量区别原理详解
Aug 14 #PHP
You might like
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php生成excel列序号代码实例
2013/12/24 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
使用jQuery fancybox插件打造一个实用的数据传输模态弹出窗体
2013/01/15 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
python原始套接字编程示例分享
2014/02/21 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
手写一个python迭代器过程详解
2019/08/27 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
python实现自动打卡的示例代码
2020/10/10 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
教师实习自我鉴定
2013/12/14 职场文书
企业给企业的表扬信
2014/01/13 职场文书
海南地接欢迎词
2014/01/14 职场文书
化工专业大学生职业生涯规划书
2014/01/14 职场文书
公司户外活动总结
2014/07/04 职场文书
护理培训心得体会
2016/01/22 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS