ホームページ >バックエンド開発 >PHPチュートリアル >PHP による IP ロケーションのソース コードの決定_PHP チュートリアル

PHP による IP ロケーションのソース コードの決定_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:06:11859ブラウズ

以下のコードは、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 = '- 無効な IP アドレス';
} 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 '- 無効な IP データ ファイル';
}

$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 '- システム エラー';
}
$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) fclose($fd);
return '- システム エラー';
}
$DataSeek = implode('', unpack('L', $DataSeek) .chr(0) ));
fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4);
if(strlen($ipData2) fclose($fd);
return '- システム エラー';
}
$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) fclose($ fd);
return '- システム エラー';
}
$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 ) fclose($fd);
return '- システム エラー';
}
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$ AddrSeek2 = fread($ fd, 3);
if(strlen($AddrSeek2) < 3) {
fclose($fd);
return '- システム エラー';
}
$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 '- システムエラー';
}
$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 = '- 不明';
}

return '- '.$ipaddr;

}


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/445058.html技術記事我们下の一段代コードは IP に基づいて識別用户所以城市哦、php 判断 IP 在源コード完全公开的呼出 我们下の一段代コードは IP に基づいて識別用户所以城市哦...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。