Core_IpSource::_convertip_tiny
null Core_IpSource::_convertip_tiny( )
File: ./core/classes/ipsource.class.php
protected static function _convertip_tiny($ip, $ipdatafile)
{
static $fp = NULL, $offset = array(), $index = NULL;
$ipdot = explode('.', $ip);
$ip = pack('N', ip2long($ip));
$ipdot[0] = (int)$ipdot[0];
$ipdot[1] = (int)$ipdot[1];
if (null===$fp && $fp = @fopen($ipdatafile, 'rb'))
{
$offset = @unpack('Nlen', @fread($fp, 4));
$index = @fread($fp, $offset['len'] - 4);
}
elseif (false==$fp)
{
return 'Invalid IP data file';
}
$length = $offset['len'] - 1028;
$start = @unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);
for( $start = $start['len'] * 8 + 1024; $start < $length; $start += 8 )
{
if ( $index{$start} . $index{$start + 1} . $index{$start + 2} . $index{$start + 3} >= $ip )
{
$index_offset = @unpack('Vlen', $index{$start + 4} . $index{$start + 5} . $index{$start + 6} . "\x0");
$index_length = @unpack('Clen', $index{$start + 7});
break;
}
}
@fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
if ( $index_length['len'] )
{
return @fread($fp, $index_length['len']);
}
else
{
return 'Unknown';
}
}