我想做一个判断用户的网络提供商的功能,如果是电信用户访问A服务器,否则访问B服务器,类似与dnspod的功能,我在网上找到了一个php分析ip段的类,根据我的外网ip,没能再ip列表中找到匹配的值,请高手看看哪里计算错误。多谢
这段是ip分析类:class ipCheck { 
public $ipRangeStr = '10.0.0.1/8'; 
public $msg = '';
function __construct($ipRangeStr){ 
!empty($ipRangeStr) ? $this->ipRangeStr = $ipRangeStr : ''; 
}
function check($ip = '') { 
empty($ip) && $ip = $this->getClientIp();
# 判断检测类型
if (FALSE !== strpos($this->ipRangeStr,'-')){
$type = 'size'; // 简单比大小:10.0.0.1-254 OR 10.0.0.1-10.0.0.254 
}else if(FALSE !== strpos($this->ipRangeStr,'/')){
$type = 'mask'; // 掩码比大小:10.0.0.1/24 
}else{
$this->msg = '错误的IP范围值';
return FALSE; 

# 分析IP范围 
if ('size' === $type){
$ipRangeStr = explode('-',$this->ipRangeStr);
$ipAllowStart = $ipRangeStr[0];
$ipAllowEnd = $ipRangeStr[1];
if (FALSE === strpos($ipAllowEnd,'.')){ # 10.0.0.254 OR 254
$ipAllowElmArray = explode('.',$ipAllowStart);
$ipAllowEnd = $ipAllowElmArray[0].'.'.$ipAllowElmArray[1].'.'.$ipAllowElmArray[2].'.'.$ipAllowEnd;

}else if ('mask' === $type){
$ipRangeStr = explode('/',$this->ipRangeStr); 
$ipRangeIP = $ipRangeStr[0];
# 获取掩码中最后一位非零数的值
$ipRangeMask = (int)$ipRangeStr[1];
$maskElmNumber = floor($ipRangeMask/8); # 保留IP前几段
$maskElmLastLen = $ipRangeMask%8; # 255.255.here.0
$maskElmLast = str_repeat(1,8-$maskElmLastLen);
$maskElmLast = bindec($maskElmLast); # 掩码中IP末段最大值(十进制)  

// 获取IP段开始、结束值
$ipRangeIPElmArray = explode('.',$ipRangeIP);
if (0 == $maskElmNumber){
$ipAllowStart = '0.0.0.0';
$ipAllowEnd = $maskElmLast.'.254.254.254'; 
}else if (1 == $maskElmNumber){
$ipAllowStart = $ipRangeIPElmArray[0].'.'.'0.0.0';
$ipAllowEnd = $ipRangeIPElmArray[0].'.'.$maskElmLast.'.254.254';
}else if (2 == $maskElmNumber){
$ipAllowStart = $ipRangeIPElmArray[0].'.'.$ipRangeIPElmArray[1].'.'.'0.0';
$ipAllowEnd = $ipRangeIPElmArray[0].'.'.$ipRangeIPElmArray[1].'.'.$maskElmLast.'.254';
}else if (3 == $maskElmNumber){
$ipAllowStart = $ipRangeIPElmArray[0].'.'.$ipRangeIPElmArray[1].'.'.$ipRangeIPElmArray[2].'.'.'0';
$ipAllowEnd = $ipRangeIPElmArray[0].'.'.$ipRangeIPElmArray[1].'.'.$ipRangeIPElmArray[2].'.'.$maskElmLast;
}else if (4 == $maskElmNumber){
$ipAllowEnd = $ipAllowStart = $ipRangeIP;
}else{
$this->msg = '错误的IP段数据';
return $this->msg;

}else{
$this->msg = '错误的IP段类型';
return $this->msg; 


// 检测IP 
$ipAllowStart = $this->getDecIp($ipAllowStart); 
$ipAllowEnd = $this->getDecIp($ipAllowEnd); 
$ip = $this->getDecIp($ip); 
//print_r($ip);exit;
if (!empty($ip)){
if ($ip <= $ipAllowEnd && $ip >= $ipAllowStart){
//$this->msg = 'IP检测通过';
return TRUE;
}else{
$this->msg = '此为被限制IP';
//return FALSE;

}else{
FALSE === ($this->msg) && $this->msg == '没有提供待检测IP'; // getClentIp() 是否返回false
return $this->msg; // 没有获取到客户端IP,返回 

}

// 10进制IP 
function getDecIp($ip){ 
$ip = explode(".", $ip);
return $ip[0]*255*255*255+$ip[1]*255*255+$ip[2]*255+$ip[3]; 
}

// 获取客户端IP 
function getClientIp(){ 
if(isset($_SERVER['REMOTE_ADDR'])){
return $_SERVER['REMOTE_ADDR']; 
}else{
$this->msg = '不能获取客户端IP';
return FALSE; 



我的ip是:60.168.3.73(电信)ip列表段(一小段):
60.168.0.0/13;
60.176.0.0/12;
60.235.0.0/16;
61.4.84.0/22;
61.4.88.0/21;
61.45.224.0/20;
61.132.0.0/16;
61.133.128.0/17;
61.134.0.0/18;
61.134.64.0/19;
我在类中打印出来第一行ip段的起止ip是:print_r($ipAllowStart);echo "<br>";
print_r($ipAllowEnd);exit;
返回结果是:
60.0.0.0
60.7.254.254我的外网ip并不在这个段内,就算循环完所有中国电信的ip地址段都没有匹配成功的,研究很久了没找到问题所在,请高手看看怎么回事,多谢,在线等着