今天在研究纯真ip数据库,在对ip地址进行比较匹配的问题上花了很多时间,效果总是不太理想.
不经意间看到php存在这个函数:ip2long,就是将ip字符串转成长整型.所以下意识就觉得mysql应该也有.果然老天不负有心人,让我终于找到了:INET_ATON和INET_NTOA.
函数INET_ATON和php的ip2long相似,是把字符串转成长整型.
而函数INET_NTOA是INET_ATON的逆过程.
有了这两个函数,在数据库中操作ip就相当容易了.
另附件有mysql版的纯真ip数据库及php操作纯真ip数据库(dat文件)的类:
/**
* @author 马秉尧
*/
class IpLocation {
/**
* QQWry.Dat文件指针
* @var resource
*/
var $fp;
/**
* 第一条IP记录的偏移地址
*
* @var int
*/
var $firstip;
/**
* 最后一条IP记录的偏移地址
*
* @var int
*/
var $lastip;
/**
* IP记录的总条数(不包含版本信息记录)
*
* @var int
*/
var $totalip;
/**
* 返回读取的长整型数
*
* @access private
* @return int
*/
function getlong() {
//将读取的little-endian编码的4个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}
/**
* 返回读取的3个字节的长整型数
*
* @access private
* @return int
*/
function getlong3() {
//将读取的little-endian编码的3个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result[&#