国产午夜男女爽爽爽爽爽_亚洲A∨无码一区二区一二区毛片_蜜桃tv在线二三区_天天摸一摸视频寡妇_国产欧美国产精品第二区_亚洲老司机在线凹凸福利网站_大痉挛中文字幕色视频_欧美日韩性爱第一页_亚洲高清无码在线一区二区_亚洲黄片视频免费看

根據(jù)按城市IP跳轉(zhuǎn)到指定地址的PHP源碼

2012-02-07 22:02:31

網(wǎng)上很多都轉(zhuǎn)載的,存在代碼的不完整,有的還很繁瑣,下面的是修正無錯(cuò)版本

  1. <?
     
  2. //php獲取ip的算法
     
  3. $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
     
  4. $user_IP = ($user_IP) ? $user_IP : $_SERVER["REMOTE_ADDR"];
     
  5. //echo $user_IP;
     
  6. ?>
     
  7. <?
     
  8. function convertip($ip) {
     
  9.     //IP數(shù)據(jù)文件路徑
     
  10.     $dat_path = 'qqwry.dat';
     
  11.     //檢查IP地址
     
  12.     if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)){
     
  13.         return 'IP Address Error';
     
  14.     }
     
  15.     //打開IP數(shù)據(jù)文件
     
  16.     if(!$fd = @fopen($dat_path, 'rb')){
     
  17.         return 'IP date file not exists or access denied';
     
  18.     }
     
  19.     //分解IP進(jìn)行運(yùn)算,得出整形數(shù)
     
  20.     $ip = explode('.', $ip);
     
  21.     $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
     
  22.     //獲取IP數(shù)據(jù)索引開始和結(jié)束位置
     
  23.     $DataBegin = fread($fd, 4);
     
  24.     $DataEnd = fread($fd, 4);
     
  25.     $ipbegin = implode('', unpack('L', $DataBegin));
     
  26.     if($ipbegin < 0) $ipbegin += pow(2, 32);
     
  27.     $ipend = implode('', unpack('L', $DataEnd));
     
  28.     if($ipend < 0) $ipend += pow(2, 32);
     
  29.     $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
     
  30.     $BeginNum = 0;
     
  31.     $EndNum = $ipAllNum;
     
  32.     //使用二分查找法從索引記錄中搜索匹配的IP記錄
     
  33.     while($ip1num>$ipNum || $ip2num<$ipNum) {
     
  34.         $Middle= intval(($EndNum + $BeginNum) / 2);
     
  35.         //偏移指針到索引位置讀取4個(gè)字節(jié)
     
  36.         fseek($fd, $ipbegin + 7 * $Middle);
     
  37.         $ipData1 = fread($fd, 4);
     
  38.         if(strlen($ipData1) < 4) {
     
  39.             fclose($fd);
     
  40.             return 'System Error';
     
  41.         }
     
  42.         //提取出來的數(shù)據(jù)轉(zhuǎn)換成長整形,如果數(shù)據(jù)是負(fù)數(shù)則加上2的32次冪
     
  43.         $ip1num = implode('', unpack('L', $ipData1));
     
  44.         if($ip1num < 0) $ip1num += pow(2, 32);
     
  45.         //提取的長整型數(shù)大于我們IP地址則修改結(jié)束位置進(jìn)行下一次循環(huán)
     
  46.         if($ip1num > $ipNum) {
     
  47.             $EndNum = $Middle;
     
  48.             continue;
     
  49.         }
     
  50.         //取完上一個(gè)索引后取下一個(gè)索引
     
  51.         $DataSeek = fread($fd, 3);
     
  52.         if(strlen($DataSeek) < 3) {
     
  53.             fclose($fd);
     
  54.             return 'System Error';
     
  55.         }
     
  56.         $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
     
  57.         fseek($fd, $DataSeek);
     
  58.         $ipData2 = fread($fd, 4);
     
  59.         if(strlen($ipData2) < 4) {
     
  60.             fclose($fd);
     
  61.             return 'System Error';
     
  62.         }
     
  63.         $ip2num = implode('', unpack('L', $ipData2));
     
  64.         if($ip2num < 0) $ip2num += pow(2, 32);
     
  65.         //沒找到提示未知
     
  66.         if($ip2num < $ipNum) {
     
  67.             if($Middle == $BeginNum) {
     
  68.                 fclose($fd);
     
  69.                 return 'Unknown';
     
  70.             }
     
  71.             $BeginNum = $Middle;
     
  72.         }
     
  73.     }
     
  74.     //下面的代碼沒讀明白
     
  75.     $ipFlag = fread($fd, 1);
     
  76.     if($ipFlag == chr(1)) {
     
  77.         $ipSeek = fread($fd, 3);
     
  78.         if(strlen($ipSeek) < 3) {
     
  79.             fclose($fd);
     
  80.             return 'System Error';
     
  81.         }
     
  82.         $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
     
  83.         fseek($fd, $ipSeek);
     
  84.         $ipFlag = fread($fd, 1);
     
  85.     }
     
  86.     if($ipFlag == chr(2)) {
     
  87.         $AddrSeek = fread($fd, 3);
     
  88.         if(strlen($AddrSeek) < 3) {
     
  89.             fclose($fd);
     
  90.             return 'System Error';
     
  91.         }
     
  92.         $ipFlag = fread($fd, 1);
     
  93.         if($ipFlag == chr(2)) {
     
  94.             $AddrSeek2 = fread($fd, 3);
     
  95.             if(strlen($AddrSeek2) < 3) {
     
  96.                 fclose($fd);
     
  97.                 return 'System Error';
     
  98.             }
     
  99.             $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
     
  100.             fseek($fd, $AddrSeek2);
     
  101.         } else {
     
  102.             fseek($fd, -1, SEEK_CUR);
     
  103.         }
     
  104.         while(($char = fread($fd, 1)) != chr(0))
     
  105.             $ipAddr2 .= $char;
     
  106.         $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
     
  107.         fseek($fd, $AddrSeek);
     
  108.         while(($char = fread($fd, 1)) != chr(0))
     
  109.             $ipAddr1 .= $char;
     
  110.     } else {
     
  111.         fseek($fd, -1, SEEK_CUR);
     
  112.         while(($char = fread($fd, 1)) != chr(0))
     
  113.             $ipAddr1 .= $char;
     
  114.         $ipFlag = fread($fd, 1);
     
  115.         if($ipFlag == chr(2)) {
     
  116.             $AddrSeek2 = fread($fd, 3);
     
  117.             if(strlen($AddrSeek2) < 3) {
     
  118.                 fclose($fd);
     
  119.                 return 'System Error';
     
  120.             }
     
  121.             $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
     
  122.             fseek($fd, $AddrSeek2);
     
  123.         } else {
     
  124.             fseek($fd, -1, SEEK_CUR);
     
  125.         }
     
  126.         while(($char = fread($fd, 1)) != chr(0)){
     
  127.             $ipAddr2 .= $char;
     
  128.         }
     
  129.     }
     
  130.     fclose($fd);
     
  131.     //最后做相應(yīng)的替換操作后返回結(jié)果
     
  132.     if(preg_match('/http/i', $ipAddr2)) {
     
  133.         $ipAddr2 = '';
     
  134.     }
     
  135.     $ipaddr = "$ipAddr1 $ipAddr2";
     
  136.     $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
     
  137.     $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
     
  138.     $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
     
  139.     if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
     
  140.         $ipaddr = 'Unknown';
     
  141.     }
     
  142.     return $ipaddr;
     
  143. }
     
  144. ?>
     
  145. <script language="java script">
     
  146. var sf='<?echo convertip($user_IP);?>';
     
  147. if(sf.indexOf("富陽")>=0){
     
  148.         window.location.href="http://fyyy.org";
     
  149. }
     
  150. else if(sf.indexOf("深圳")>=0){
     
  151.         window.location.href="http://fyyy29.fyyy.org/";
     
  152. }
     
  153. else if(sf.indexOf("廣東")>=0){
     
  154.         window.location.href="http://fyyy22.fyyy.org/";
     
  155. }
     
  156. else if(sf.indexOf("杭州")>=0){
     
  157.         window.location.href="http://fyyy22.fyyy.org/";
     
  158. }
     
  159. else{
     
  160.         window.location.href="http://www.fyyy.org";
     
  161. }
     
  162. </script>
復(fù)制代碼