您好,欢迎访问一九零五行业门户网

php 根据IP显示地区代码

php 根据ip显示地区代码
func = 'data_mini';
   $this->fp = @fopen(ipdata_mini, 'rb');
   $this->offset = unpack('nlen', fread($this->fp, 4));
   $this->index  = fread($this->fp, $this->offset['len'] - 4);
  }
  elseif(@file_exists(ipdata_full))
  {
   $this->func = 'data_full';
   $this->fp = @fopen(ipdata_full, 'rb');
  }
 }
 function get($ip)
 {
  $return = '';
  if(preg_match(/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/, $ip))
  {
   $iparray = explode('.', $ip);
   if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1]    {
    $return = 'lan';
   }
   elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255)
   {
    $return = 'invalid ip address';
   }
   else
   {
    $return = $this->func ? $this->{$this->func}($ip) : '';
    if(strpos($return, ' ') !== false) $return = substr($return, 0, strpos($return,' '));
   }
   if(strtolower(charset) == 'utf-8') $return = iconv('gbk', 'utf-8', $return);
  }
  return $return;
 }
 function data_mini($ip)
 {
  $ipdot = explode('.', $ip);
  $ipdot[0] = (int)$ipdot[0];
  $ipdot[1] = (int)$ipdot[1];
  $ip    = pack('n', ip2long($ip));
  $length = $this->offset['len'] - 1028;
  $start  = unpack('vlen', $this->index[$ipdot[0] * 4] . $this->index[$ipdot[0] * 4 + 1] . $this->index[$ipdot[0] * 4 + 2] . $this->index[$ipdot[0] * 4 + 3]);
  for($start = $start['len'] * 8 + 1024; $start   {
   if($this->index{$start} . $this->index{$start + 1} . $this->index{$start + 2} . $this->index{$start + 3} >= $ip)
   {
    $this->index_offset = unpack('vlen', $this->index{$start + 4} . $this->index{$start + 5} . $this->index{$start + 6} . x0);
    $this->index_length = unpack('clen', $this->index{$start + 7});
    break;
   }
  }
  fseek($this->fp, $this->offset['len'] + $this->index_offset['len'] - 1024);
  if($this->index_length['len'])
  {
   return str_replace('- ', '', fread($this->fp, $this->index_length['len']));
  }
  else
  {
   return 'unknown';
  }
 }
 function data_full($ip)
 {
  rewind($this->fp);
  $ip = explode('.', $ip);
  $ipnum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
  if(!($databegin = fread($this->fp, 4)) || !($dataend = fread($this->fp, 4)) ) return;
  @$ipbegin = implode('', unpack('l', $databegin));
  if($ipbegin   @$ipend = implode('', unpack('l', $dataend));
  if($ipend   $ipallnum = ($ipend - $ipbegin) / 7 + 1;
  $beginnum = $ip2num = $ip1num = 0;
  $ipaddr1 = $ipaddr2 = '';
  $endnum = $ipallnum;
  while($ip1num > $ipnum || $ip2num   {
   $middle= intval(($endnum + $beginnum) / 2);
   fseek($this->fp, $ipbegin + 7 * $middle);
   $ipdata1 = fread($this->fp, 4);
   if(strlen($ipdata1)    {
    fclose($this->fp);
    return 'system error';
   }
   $ip1num = implode('', unpack('l', $ipdata1));
   if($ip1num    if($ip1num > $ipnum)
   {
    $endnum = $middle;
    continue;
   }
   $dataseek = fread($this->fp, 3);
   if(strlen($dataseek)    {
    fclose($this->fp);
    return 'system error';
   }
   $dataseek = implode('', unpack('l', $dataseek.chr(0)));
   fseek($this->fp, $dataseek);
   $ipdata2 = fread($this->fp, 4);
   if(strlen($ipdata2)    {
    fclose($this->fp);
    return 'system error';
   }
   $ip2num = implode('', unpack('l', $ipdata2));
   if($ip2num    if($ip2num    {
    if($middle == $beginnum)
    {
     fclose($this->fp);
     return 'unknown';
    }
    $beginnum = $middle;
   }
  }
  $ipflag = fread($this->fp, 1);
  if($ipflag == chr(1))
  {
   $ipseek = fread($this->fp, 3);
   if(strlen($ipseek)    {
    fclose($this->fp);
    return 'system error';
   }
   $ipseek = implode('', unpack('l', $ipseek.chr(0)));
   fseek($this->fp, $ipseek);
   $ipflag = fread($this->fp, 1);
  }
  if($ipflag == chr(2))
  {
   $addrseek = fread($this->fp, 3);
   if(strlen($addrseek)    {
    fclose($this->fp);
    return 'system error';
   }
   $ipflag = fread($this->fp, 1);
   if($ipflag == chr(2)) {
    $addrseek2 = fread($this->fp, 3);
    if(strlen($addrseek2)     {
     fclose($this->fp);
     return 'system error';
    }
    $addrseek2 = implode('', unpack('l', $addrseek2.chr(0)));
    fseek($this->fp, $addrseek2);
   }
   else
   {
    fseek($this->fp, -1, seek_cur);
   }
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipaddr2 .= $char;
   $addrseek = implode('', unpack('l', $addrseek.chr(0)));
   fseek($this->fp, $addrseek);
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipaddr1 .= $char;
  }
  else
  {
   fseek($this->fp, -1, seek_cur);
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipaddr1 .= $char;
   $ipflag = fread($this->fp, 1);
   if($ipflag == chr(2))
   {
    $addrseek2 = fread($this->fp, 3);
    if(strlen($addrseek2)     {
     fclose($this->fp);
     return 'system error';
    }
    $addrseek2 = implode('', unpack('l', $addrseek2.chr(0)));
    fseek($this->fp, $addrseek2);
   }
   else
   {
    fseek($this->fp, -1, seek_cur);
   }
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipaddr2 .= $char;
  }
  if(preg_match('/http/i', $ipaddr2)) $ipaddr2 = '';
  $ipaddr = $ipaddr1 $ipaddr2;
  $ipaddr = preg_replace('/cz88.net/is', '', $ipaddr);
  $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
  $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
  if(preg_match('/http/i', $ipaddr) || $ipaddr == '') $ipaddr = 'unknown';
  return ''.$ipaddr;
 }
 function close()
 {
  @fclose($this->fp);
 }
}
?>
其它类似信息

推荐信息