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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
PHP file_exists问题杂谈
May 07 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php树型类实例
Dec 05 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
Yii中表单用法实例详解
Jan 05 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
May 28 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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
PHP中strtotime函数使用方法分享
2012/01/10 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
同域jQuery(跨)iframe操作DOM(实例讲解)
2013/12/19 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
jQuery根据name属性进行查找的用法分析
2016/06/23 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
javascript中的面向对象
2017/03/30 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
2017/07/19 jQuery
JS倒计时实例_天时分秒
2017/08/22 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
在Python中使用dict和set方法的教程
2015/04/27 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
Python爬取网页信息的示例
2020/09/24 Python
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
教师竞聘演讲稿
2014/05/16 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
详解MySQL 联合查询优化机制
2021/05/10 MySQL
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android