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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
discuz7 phpMysql操作类
Jun 21 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
php函数指定默认值方法的小例子
Dec 04 PHP
php使用json_encode对变量json编码
Apr 07 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
php简单压缩css样式示例
Sep 22 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 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从数组中随机抽取一些元素的代码
2012/11/05 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
用javascript实现的支持lrc歌词的播放器
2007/05/17 Javascript
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
javascript实现的基于金山词霸网络翻译的代码
2010/01/15 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
JavaScript 冒泡排序和选择排序的实现代码
2016/09/03 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
python 域名分析工具实现代码
2009/07/15 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
秋季运动会加油稿200字
2014/01/11 职场文书
幼儿园秋游感想
2014/03/12 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
小学学校评估方案
2014/06/08 职场文书
2015大学生实训报告
2014/11/05 职场文书
红色革命电影观后感
2015/06/18 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
JavaScript实现班级抽签小程序
2021/05/19 Javascript
总结python多进程multiprocessing的相关知识
2021/06/29 Python