被遗忘的角落
PHP 控制IP段是否可以访问,算法思想比较简单,就是根据设定要锁定的IP 区间化,然后判断来访IP是否在此区间内,如果是则禁止访问,反之则可以访问。
<?php
//把IP进行格式化,统一为IPV4, 参数:$op --操作类型 max 表示格式为该段的最大值,比如:192.168.1.* 格式化为:192.168.1.255 ,其它任意值表示格式化最小值: 192.168.1.1
function convert_ip($op,$ip)
{
$arr_ip = explode(".",$ip);
$arr_temp = array();
$i = 0;
$ip_val= $op== "max" ? "255":"1";
foreach($arr_ip as $key =--> $val )
{
$i++;
$val = $val== "*" ? $ip_val:$val;
$arr_temp[]= $val;
}
for($i=4-$i;$i>0;$i--)
{
$arr_temp[]=$ip_val;
}
$comma = "";
foreach($arr_temp as $v)
{
$result.= $comma.$v;
$comma = ".";
}
return $result;
}
?>
<?php//取得来访问IP地址
function getip()
{
if (isset($_SERVER)) {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")) {
$realip = getenv( "HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
?>
<?php
//控制是否能够访问 参数:$ip ---来访问IP ,$ip_from --- 区间段开始IP , $ip_to --- 区间段结束IP
function ipforbidden($ip,$ip_from,$ip_to)
{
$from = strcmp($ip,$ip_from);
$to = strcmp($ip,$ip_to);
if($from -->=0 && $to <= 0)
{
return "u are forbidden!";
}
else return "u are access";
}
?>
<?php
//测试
$ip_min = convert_ip("min","127.1.0.*");
$ip_max = convert_ip("max","127.1.0.*");
$ip_current = "127.1.0.256";
echo ipforbidden($ip_current,$ip_min,$ip_max)." ";
?>
国家有大墙,我们有小墙。
自己也可以加堵墙了
集两家之言论,人人墙。。
墙掉spamer~~
不错的文章啊