PHP头条
热点:

php 判断IP所在地源码


我们下面的一段代码是根据IP来判决用户所以城市哦,php 判断IP所在地源码完全公开的呼

我们下面的一段代码是根据IP来判决用户所以城市哦,php 判断IP所在地源码完全公开的呼

function convertIp($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] <= 31))) {
   $return = '- LAN';
  } elseif ($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {
   $return = '- Invalid IP Address';
  } else {
   $ipfile = MOOPHP_ROOT.'/plugins/ipdata/wry.dat';
   if(!@file_exists($ipfile)) {
    $return = convertIpFull($ip, $ipfile);
   }
  }
 }
 return $return;
}

function convertIpFull($ip, $ipdatafile) {

 if(!$fd = @fopen($ipdatafile)) {
  return '- Invalid IP data file';
 }

 $ip = explode('.', $ip);
 $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

 if(!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4)) ) return;
 @$ipbegin = implode('', unpack('L', $DataBegin));
 if($ipbegin < 0) $ipbegin += pow(2, 32);
 @$ipend = implode('', unpack('L', $DataEnd));
 if($ipend < 0) $ipend += pow(2, 32);
 $ipAllNum = ($ipend - $ipbegin) / 7 + 1;

 $BeginNum = $ip2num = $ip1num = 0;
 $ipAddr1 = $ipAddr2 = '';
 $EndNum = $ipAllNum;

 while($ip1num > $ipNum || $ip2num < $ipNum) {
  $Middle= intval(($EndNum + $BeginNum) / 2);

  fseek($fd, $ipbegin + 7 * $Middle);
  $ipData1 = fread($fd, 4);
  if(strlen($ipData1) < 4) {
   fclose($fd);
   return '- System Error';
  }
  $ip1num = implode('', unpack('L', $ipData1));
  if($ip1num < 0) $ip1num += pow(2, 32);

  if($ip1num > $ipNum) {
   $EndNum = $Middle;
   continue;
  }

  $DataSeek = fread($fd, 3);
  if(strlen($DataSeek) < 3) {
   fclose($fd);
   return '- System Error';
  }
  $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
  fseek($fd, $DataSeek);
  $ipData2 = fread($fd, 4);
  if(strlen($ipData2) < 4) {
   fclose($fd);
   return '- System Error';
  }
  $ip2num = implode('', unpack('L', $ipData2));
  if($ip2num < 0) $ip2num += pow(2, 32);

  if($ip2num < $ipNum) {
   if($Middle == $BeginNum) {
    fclose($fd);
    return '- Unknown';
   }
   $BeginNum = $Middle;
  }
 }

 $ipFlag = fread($fd, 1);
 if($ipFlag == chr(1)) {
  $ipSeek = fread($fd, 3);
  if(strlen($ipSeek) < 3) {
   fclose($fd);
   return '- System Error';
  }
  $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
  fseek($fd, $ipSeek);
  $ipFlag = fread($fd, 1);
 }

 if($ipFlag == chr(2)) {
  $AddrSeek = fread($fd, 3);
  if(strlen($AddrSeek) < 3) {
   fclose($fd);
   return '- System Error';
  }
  $ipFlag = fread($fd, 1);
  if($ipFlag == chr(2)) {
   $AddrSeek2 = fread($fd, 3);
   if(strlen($AddrSeek2) < 3) {
    fclose($fd);
    return '- System Error';
   }
   $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
   fseek($fd, $AddrSeek2);
  } else {
   fseek($fd, -1, SEEK_CUR);
  }

  while(($char = fread($fd, 1)) != chr(0))
  $ipAddr2 .= $char;

  $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
  fseek($fd, $AddrSeek);

  while(($char = fread($fd, 1)) != chr(0))
  $ipAddr1 .= $char;
 } else {
  fseek($fd, -1, SEEK_CUR);
  while(($char = fread($fd, 1)) != chr(0))
  $ipAddr1 .= $char;

  $ipFlag = fread($fd, 1);
  if($ipFlag == chr(2)) {
   $AddrSeek2 = fread($fd, 3);
   if(strlen($AddrSeek2) < 3) {
    fclose($fd);
    return '- System Error';
   }
   $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
   fseek($fd, $AddrSeek2);
  } else {
   fseek($fd, -1, SEEK_CUR);
  }
  while(($char = fread($fd, 1)) != chr(0))
  $ipAddr2 .= $char;
 }
 fclose($fd);

 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;

}

www.phpzy.comtrue/php/9679.htmlTechArticlephp 判断IP所在地源码 我们下面的一段代码是根据IP来判决用户所以城市哦,php 判断IP所在地源码完全公开的呼 我们下面的一段代码是根据IP来判决用户所以城市哦,php 判断IP所在地源码...

相关文章

    暂无相关文章
相关频道:

PHP之友评论

今天推荐