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 相关文章推荐
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
Apr 12 PHP
php学习之数据类型之间的转换代码
May 29 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php通过array_merge()函数合并关联和非关联数组的方法
Mar 18 PHP
php常用表单验证类用法实例
Jun 18 PHP
php实现CSV文件导入和导出
Oct 24 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
PHP中16个高危函数整理
Sep 19 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 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
global.php
2006/12/09 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
分享一则JavaScript滚动条插件源码
2015/03/03 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
JavaScript面向对象精要(下部)
2017/09/12 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
用Python写冒泡排序代码
2016/04/12 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python读写压缩文件的方法
2020/07/30 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
.NET面试问题集
2015/12/08 面试题
酒店总经理职务说明书
2014/02/26 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2016应届毕业生就业指导课心得体会
2016/01/15 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python