可用过 ip2long将ip转换为long类型,然后判断ip是某个范围内
composer安装并使用
composer require tanchengjin/utils
$s = new \tanchengjin\utils\ip\SimpleCheckIPV4('192.168.1.1','192.168.3.255');
//检查多个ip范围
$s = new \tanchengjin\utils\ip\CheckIPV4([
['192.168.1.1', '192.168.1.255'],
['192.168.2.1', '192.168.3.255'],
]);
die(var_dump($s->isAllow('192.168.3.255')));
核心源码
/**
* 检查ip是否在某个网段中
* @return boolean
* @author TanChengjin
* @email 18865477815@163.com
*/
public function isAllow($ip)
{
$start_ip = $this->IPV4ConvertToLong($this->startIpAddress);
$end_ip = $this->IPV4ConvertToLong($this->endIpAddress);
$ip = $this->IPV4ConvertToLong($ip);
return ($ip >= $start_ip) && ($ip <= $end_ip);
}
/**
* 将ip地址转换为long
* @param $ip
* @return float|int
* @author TanChengjin
* @email 18865477815@163.com
*/
protected function IPV4ConvertToLong($ip)
{
// ip2long — 将一个IPV4的字符串互联网协议转换成数字格式。
//为防止ip过大出现负数使用bindec,decbin
return bindec(decbin(ip2long($ip)));
}