选择语言 :

 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';
    }

}