?
PHP tutorials to get IP algorithms
$user _ip = ($_server["Http_via"])? $_server["Http_x_forwarded_for"]: $_server["REMOTE_ADDR"];
$user _ip = ($user _ip)? $user _ip: $_server["REMOTE_ADDR"];
echo $user _ip;
//===================================
//
Function: IP address get real address function
Parameters: $ip-IP Address
Author: [discuz!] (C) Comsenz Inc.
//
//===================================
function Convertip ($IP) {
IP data file path, please modify it as appropriate
$dat _path = ' QQWry.dat ';
Check IP Address
if (!ereg ("^ [0-9]{1,3}.) {3} [0-9] {1,3}$ ", $ip)) {
Return "IP address Error";
}
Open IP Data file
if (! $fd = @fopen ($dat _path, ' RB ')) {
Return ' IP date file not exists or access denied ';
}
Decomposition of IP to calculate the number of plastic
$ip = Explode ('. ', $IP);
$ipNum = $ip [0] * 16777216 + $ip [1] * 65536 + $ip [2] * 256 + $IP [3];
Get IP Data index start and end locations
$DataBegin = Fread ($FD, 4);
$DataEnd = Fread ($FD, 4);
$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 = 0;
$EndNum = $ipAllNum;
Search for matching IP records from index records using the binary lookup method
while ($ip 1num> $ipNum | | $ip 2num< $ipNum) {
$Middle = Intval (($EndNum + $BeginNum)/2);
Offset pointer reads 4 bytes to index position
Fseek ($FD, $ipbegin + 7 * $Middle);
$ipData 1 = fread ($FD, 4);
if (strlen ($ipData 1) < 4) {
Fclose ($FD);
Return ' System Error ';
}
The extracted data is transformed and shaped, if the data is negative, plus 2 of the 32 power
$ip 1num = Implode (', Unpack (' L ', $ipData 1));
if ($ip 1num < 0) $ip 1num + + POW (2, 32);
The number of long integers fetched is greater than our IP address to modify the end position for the next loop
if ($ip 1num > $ipNum) {
$EndNum = $Middle;
Continue
}
Remove an index after fetching the previous index
$DataSeek = Fread ($FD, 3);
if (strlen ($DataSeek) < 3) {
Fclose ($FD);
Return ' System Error ';
}
$DataSeek = Implode (', Unpack (' L ', $DataSeek. chr (0)));
Fseek ($FD, $DataSeek);
$ipData 2 = fread ($FD, 4);
if (strlen ($ipData 2) < 4) {
Fclose ($FD);
Return ' System Error ';
}
$ip 2num = Implode (', Unpack (' L ', $ipData 2));
if ($ip 2num < 0) $ip 2num + + POW (2, 32);
I can't find the hint unknown.
if ($ip 2num < $ipNum) {
if ($Middle = = $BeginNum) {
Fclose ($FD);
Return ' Unknown ';
}
$BeginNum = $Middle;
}
}
The following code read dizzy, did not read clearly, interested in slowly read
$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)) {
$AddrSeek 2 = fread ($FD, 3);
if (strlen ($AddrSeek 2) < 3) {
Fclose ($FD);
Return ' System Error ';
}
$AddrSeek 2 = implode (', Unpack (' L ', $AddrSeek 2.chr (0)));
Fseek ($FD, $AddrSeek 2);
} else {
Fseek ($FD,-1, seek_cur);
}
while (($char = Fread ($FD, 1))!= chr (0))
$ipAddr 2. = $char;
$AddrSeek = Implode (', Unpack (' L ', $AddrSeek. chr (0)));
Fseek ($FD, $AddrSeek);
while (($char = Fread ($FD, 1))!= chr (0))
$ipAddr 1. = $char;
} else {
Fseek ($FD,-1, seek_cur);
while (($char = Fread ($FD, 1))!= chr (0))
$ipAddr 1. = $char;
$ipFlag = Fread ($FD, 1);
if ($ipFlag = = Chr (2)) {
$AddrSeek 2 = fread ($FD, 3);
if (strlen ($AddrSeek 2) < 3) {
Fclose ($FD);
Return ' System Error ';
}
$AddrSeek 2 = implode (', Unpack (' L ', $AddrSeek 2.chr (0)));
Fseek ($FD, $AddrSeek 2);
} else {
Fseek ($FD,-1, seek_cur);
}
while (($char = Fread ($FD, 1))!= chr (0)) {
$ipAddr 2. = $char;
}
}
Fclose ($FD);
Finally, the result is returned after the corresponding substitution operation
if (Preg_match ('/http/i ', $ipAddr 2)) {
$ipAddr 2 = ';
}
$IPADDR = "$ipAddr 1 $ipAddr 2";
$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;
}
?>
<script language= "JavaScript Tutorial" >
var sf= ' <?echo convertip ($user _ip);? > ';
if (Sf.indexof ("Hong Kong") >=0) {
Window.location.href= "Http://xianggang.111cn.net";
}
else if (Sf.indexof ("Guangdong province") >=0) {
Window.location.href= "Http://guangdong.111cn.net";
}
else if (sf.indexof ("Beijing") >=0) {
Window.location.href= "Http://beijing.111cn.net";
}
else{
Window.location.href= "Http://www.111cn.net";
}
</script>