• PHP限制IP


    PHP限制IP

    <?php
    /*********************************************
    * 文件:limitip.php
    * 用途:IP限制程序
    * 版本:v1.0
    * 日期:2005-1-7 12:34
    * 作者:heiyeluren (heiyeluren@163.com)
    * 版权:http://www.unixsky.net
    *********************************************/

    error_reporting(7);
    session_start();

    // 发送字符头信息
    if ($headercharset)
    header("Content-Type:text/html; charset=gb2312");

    // 加载公共文件
    require_once("config.php");
    require_once("global.php");
    require_once("db_mysql.php");

    /***************** 进行客户端能否访问本网站校验 ************/

    // 获取客户端IP
    if(getenv('HTTP_CLIENT_IP')) {
    $client_ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
    $client_ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR')) {
    $client_ip = getenv('REMOTE_ADDR');
    } else {
    $client_ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
    }

    // 分解客户端IP
    $cip = explode(".", $client_ip);

    // 连接数据库
    $db = new DB_Sql();
    $err = $db->connect();

    /*  限制远程IP访问, PS: 这段代码真晕,呵呵,用了8个if, -_-#  */
    // 从数据库中提取存储的要限制的IP地址
    $query_str = "SELECT limit_ip FROM us_limitip";
    $db->query($query_str);
    // 把结果循环提取,一个个进行校验
    while ($db->next_record())
    {
    $limit_ip = $db->f("limit_ip");
    $lip = explode(".", $limit_ip);
    // 如果限制IP的第一个是*或者是0的话就跳到错误页
    if (($lip[0]=='*') || ($lip[0]=='0'))
      header("Location:../error.php?errid=300");
    // 如果刚好客户端IP等于我们限制IP就跳到错误页
    if ($client_ip==$limit_ip)
      header("Location:../error.php?errid=300");
    // 如果第一组IP一致进行第二组IP的匹配
    if ($cip[0] == $lip[0])
    {
      // 如果第二组限制IP是*就跳到错误页
      if ($lip[1]=='*')
       header("Location:../error.php?errid=300");
      // 第二组IP匹配就进行第三组IP匹配
      if ($cip[1]==$lip[1])
      {
       // 如果第三组限制字符是*就跳到错误页
       if ($lip[2]=='*')
        header("Location:../error.php?errid=300");
       // 如果第三组IP匹配就跳到第三组校验
       if ($cip[2]==$lip[2])
       {
        // 如果第四组限制IP是*或0就跳到错误页
        if (($lip[3]=='*') || ($lip[3]=='0'))
         header("Location:../error.php?errid=300");
       }
      }
    }  
    }
    // 释放数据库查询结果
    $db->free();

    /****************** IP校验结束 ******************/

    ?>

  • 相关阅读:
    SQL查询Profile设置
    AP如何定义发票的行分配账户的默认值
    使用UTL_MAIL包实现存储过程邮件发送(转)
    如何优化库存管理
    VS2008 一个IDE配色方案
    Rails2的部分新特性
    TDD Tip:方法内部New出来的对象如何Mock
    我的2008
    rails2.2 无法加载mysql的解决
    ASP.NET MVC AJAX的调用
  • 原文地址:https://www.cnblogs.com/fengju/p/6173904.html
Copyright © 2020-2023  润新知