Home  >  Article  >  Backend Development  >  PHP determines IP location source code_PHP tutorial

PHP determines IP location source code_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:06:11790browse

The code below is used to determine the user's city based on the IP. The source code for php to determine the IP location is completely open.

The code below is used to determine the city based on the IP. The source code for php to determine the IP location is completely open. Call

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.bkjia.comtruehttp://www.bkjia.com/PHPjc/445058.htmlTechArticle我们下面的一段代码是根据IP来判决用户所以城市哦,php 判断IP所在地源码完全公开的呼 我们下面的一段代码是根据IP来判决用户所以城市哦...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn