快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

限制IP访问的思路和PHP代码

那天写自己的网站,想到要有关于限制IP的功能,至少要包括能够在后台设置要限制的IP,还有,能够对IP段进行限制,比如 192.168.0.* 相同的就能够限制整个段,左思右想,用了好几个if判定才解决,把简朴的代码如下:(程序中使用了phplib中的db类)

<?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校验结束 ******************/

?>

代码只是我初步的一个想法,肯定有不足,假如高手有更好建议请不吝赐教!


返回类别: 教程
上一教程: 使用PHP的错误处理
下一教程: 为什么我的 Mysql 不支持中文查询

您可以阅读与"限制IP访问的思路和PHP代码"相关的教程:
· php生成SessionID和图片校验码的思路和实现
· 浅淡PHP生成HTML的思路
· PHP中静态页处理动态内容的思路
· 使用PHP制作新闻系统的思路
· 用PHP制作zip压缩程序
    微笑服务 优质保证 索取样品