您可以使用ip2long
http://php.net/manual/en/function.ip2long.php含有的(IPv4)的互聯網協議地址點綴與此正確的地址的字符串,你可以有一個範圍像
echo ip2long('192.168.1.1');//-1062731519
echo ip2long('192.168.1.6');//-1062731514
轉換與此你可以檢查用戶的IP範圍,...有效或...
例如,如果用戶IP在192.168.1.1-192.168.1.6範圍內echo 'hello';
//http://www.php.net/manual/en/function.ip2long.php#81030
function in_ip_range($ip_one, $ip_two=false){
if($ip_two===false){
if($ip_one==$_SERVER['REMOTE_ADDR']){
$ip=true;
}else{
$ip=false;
}
}else{
if(ip2long($ip_one)<=ip2long($_SERVER['REMOTE_ADDR']) && ip2long($ip_two)>=ip2long($_SERVER['REMOTE_ADDR'])){
$ip=true;
}else{
$ip=false;
}
}
return $ip;
}
//usage
if(in_ip_range('192.168.1.1','192.168.1.6')){
echo 'hello';
}
IP組
$list=array(
'192.168.1.1',
'192.168.1.2',
'192.168.1.3',
'192.168.1.5',
'192.168.1.6',
'192.168.1.6',
'192.168.1.9'
);
$Grouplist='';
foreach($list as $ip){
$ip2long=ip2long($ip);
if(is_array($Grouplist)){
$is_group=false;
foreach($Grouplist as $Key=>$Range){
$Range=explode("/",$Range);
if(($Range[0]-1)<$ip2long and $ip2long<($Range[1]+1)){
$is_group=true;
continue;
}elseif(($Range[0]-1)==$ip2long){
$Grouplist[$Key]=$ip2long.'/'.$Range[1];
$is_group=true;
}elseif(($Range[1]+1)==$ip2long){
$Grouplist[$Key]=$Range[0].'/'.$ip2long;
$is_group=true;
}
}
if(!$is_group)
{
$Grouplist[]=($ip2long).'/'.($ip2long);
}
}else{
$Grouplist[]=($ip2long).'/'.($ip2long);
}
}
print_r($Grouplist);
輸出:
Array
(
[0] => -1062731519/-1062731517
[1] => -1062731515/-1062731514
[2] => -1062731511/-1062731511
)
,如果轉換到IP組是
foreach($Grouplist as $Val){
$Range=explode("/",$Val);
echo long2ip($Range[0])."/".long2ip($Range[1])."\n";
}
輸出
192.168.1.1/192.168.1.3
192.168.1.5/192.168.1.6
192.168.1.9/192.168.1.9
'ip2long'功能夠好,不是嗎? – Raptor 2013-04-29 06:04:41
我正在考慮使用相同的。但不知道在php – Aditi 2013-04-29 06:08:08
中使用natsort @Aditi什麼是你的ip列表?陣列? – 2013-04-29 06:17:45