您好,欢迎访问一九零五行业门户网

php中实现IP地址的限制访问_PHP

ip地址
先将你的允许访问ip范围写出来。如果不知道,就要到网上找一个ip表看看
单个 ip:
if ( $remote_addr == '12.34.56.78' )
{
//允许访问
}
如果是一组 ip,就要看这些 ip 的范围及是否连续了
连续的 ip 好办一些,不连续的 ip 就得挨个比较,影响速度 。
限制ip的一段源程序:
if($globals[canmaskip]==1) //封杀ip地址
{
$strsql=select count(*) from maskip where '.$globals[strvisitedip].' between srcipaddr and desipaddr;
$tmpmaskip=mysql_fetch_row(mysql_query($strsql,$globals[hdatabase]));
if($tmpmaskip[0]>0)
{
echo \n;
echo
\n;
echo .$globals[windowtitle].\n;
echo \n;
echo \n;
echo
\n;
echo
\n;
echo
\n;
echo
\n;
echo
嘿嘿,你的ip地址被管理员禁止了哦!!
\n;
echo \n;
echo 想想你自已是不是干了什么哈?!\n;
echo \n;
echo \n;
echo ;
mysql_close($globals[hdatabase]);
exit();
}
unset($tmpmaskip);
}
%>
要求建立如下表:
create table maskip (
srcipaddr varchar(16) not null default '',
desipaddr varchar(16) not null default '',
primary key (srcipaddr)
) type=myisam comment='记录封杀ip地址';
function chkip($client_ip,$network_number,$ip_mask)
{
preg_match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,$client_ip,$ipsplit);
preg_match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,$ip_mask,$ipsplit1);
preg_match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/,$network_number,$ipsplit2);
if (((integer)$ipsplit[1]&$ipsplit1[1])==$ipsplit2[1])
if (((integer)$ipsplit[2]&$ipsplit1[2])==$ipsplit2[2])
if (((integer)$ipsplit[3]&$ipsplit1[3])==$ipsplit2[3])
if (((integer)$ipsplit[4]&$ipsplit1[4])==$ipsplit2[4])
return true;
return false;
}
?>
函数参数一个是客户端ip,后面是使用网段比较的方式,
将ip地址与掩码做与运算,结果与网段值相同,则在该网段内,返回true。
对于楼主使用的例子,其调用如下
chkip($remote_addr,202.112.96.0,255.255.255.0)
把禁止列表读到内存中然后一个个比较……
其它类似信息

推荐信息