麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > PHP > 正文

php實現多城市切換特效

2024-05-04 23:38:40
字體:
來源:轉載
供稿:網友

本文給大家主要分享的是在PHP中如何獲取用戶IP地址、PHP根據IP判斷用戶所在城市以及PHP根據IP實現城市切換或跳轉的問題。

我們先來看下個人常用的代碼

PHP

 

 
  1. <?php 
  2.  
  3.  
  4.  
  5. include_once('./qqwry.php'); 
  6. $QQWry=new QQWry;  
  7.  
  8. function get_real_ip(){ 
  9. $ip=false; 
  10. if(!emptyempty($_SERVER["HTTP_CLIENT_IP"])){ 
  11. $ip = $_SERVER["HTTP_CLIENT_IP"]; 
  12. if (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
  13. $ips = explode (", "$_SERVER['HTTP_X_FORWARDED_FOR']); 
  14. if ($ip) { array_unshift($ips$ip); $ip = FALSE; } 
  15. for ($i = 0; $i < count($ips); $i++) { 
  16. if (!eregi ("^(10|172/.16|192/.168)/."$ips[$i])) { 
  17. $ip = $ips[$i]; 
  18. break
  19. return $ip
  20.  
  21. function is_ip($str) { 
  22. $ip = explode("."$str); 
  23. if (count($ip)<4 || count($ip)>4) return 0; 
  24. foreach($ip as $ip_addr) { 
  25. if ( !is_numeric($ip_addr) ) return 0; 
  26. if ( $ip_addr<0 || $ip_addr>255 ) return 0; 
  27. return 1; 
  28.  
  29.  
  30. $ip=$_SERVER['REMOTE_ADDR'];  
  31. $ifErr=$QQWry->QQWry($ip);  
  32. $city = $QQWry->Country.$QQWry->Local; 
  33.  
  34. //echo $city;*/ 
  35.  
  36.  
  37. if (strpos($city,'玄武區')!==false){ 
  38. $city = "玄武區"
  39. else if(strpos($city,'仙林')!==false){ 
  40. $city = "仙林"
  41. else if(strpos($city,'秦淮區')!==false){ 
  42. $city = "秦淮區"
  43. else if(strpos($city,'江寧')!==false){ 
  44. $city = "江寧"
  45. else if(strpos($city,'鼓樓')!==false){ 
  46. $city = "鼓樓"
  47. else
  48. $city = "棲霞"
  49.  
  50.  
  51.  
  52. if (isset($_GET['chengshi'])) { //Ê×Ïȼì²âÊÇ·ñ»ñµÃÁË GET ´«µÝµÄÊý¾Ý  
  53. setcookie("cookie_city",$_GET['chengshi'],time()+3600*24); 
  54. $city = $_GET['chengshi'];  
  55. }  
  56. else if (isset($_COOKIE["cookie_city"])) { //¼ì²âÊÇ·ñ´æÔÚêdzÆCookie  
  57. $city = $_COOKIE["cookie_city"]; //ÏÔʾCookie±£´æµÄÊý¾Ý  
  58. }  
  59. else {  
  60. setcookie("cookie_city",$city,time()+3600*24); //´¿³õʼ»¯´Ë±äÁ¿  
  61. $_COOKIE["cookie_city"] = $city
  62. }  
  63. ?> 

HTML

 

 
  1. <!DOCTYPE html> 
  2. <html lang="zh-cn"> 
  3. <head> 
  4. <meta charset="utf-8"/> 
  5. <LINK href="css/css.css" type=text/css rel=stylesheet> 
  6. <SCRIPT src="js/jquery-1.4.2.min.js" type=text/javascript></SCRIPT> 
  7. <title>城市切換</title> 
  8. </head> 
  9. <BODY> 
  10. <DIV class=selCity id=allCity style="DISPLAY: none"> 
  11. <DIV class=area> 
  12. <TABLE> 
  13. <TBODY> 
  14. <TR> 
  15. <TD><A class=cur href="show.html">玄武區</A></TD> 
  16. <TD><A href="show1.html">仙林</A></TD> 
  17. <TD><A href="show2.html">秦淮區</A></TD> 
  18. <TD><A href="show3.html">鼓樓</A></TD> 
  19. <TD><A href="show4.html">江寧</A></TD> 
  20. <TD><A href="show5.html">棲霞區</A></TD> 
  21. </TR> 
  22. </TBODY></TABLE> 
  23. <DIV class=none><A id=foldin href="javascript:;">全部</A></DIV></DIV></DIV> 
  24. <DIV class=header> 
  25. <DIV class=area> 
  26. <DIV class=r> 
  27. <DIV class="topCtiy clear"> 
  28. <UL> 
  29.  
  30. <LI class=i1><A href="index.php">全部小區</A></LI> 
  31.  
  32. <LI class=i1> 
  33. <?php 
  34. echo $city;  
  35. ?> 
  36. </LI> 
  37. <LI class=i2 id=changeCity>切換城市</LI> 
  38. </UL> 
  39. </DIV> 
  40. </DIV> 
  41. </DIV> 
  42. </DIV> 
  43. <SCRIPT type=text/javascript> 
  44. jQuery(function(){ 
  45. $("#changeCity").click(function(a){ 
  46. $("#allCity").slideDown(300); 
  47. a.stopPropagation(); 
  48. $(this).blur(); 
  49. }); 
  50. $("#allCity").click(function(a){ 
  51. a.stopPropagation() 
  52. }); 
  53. $(document).click(function(a){ 
  54. a.button!=2 && $("#allCity").slideUp(300) 
  55. }); 
  56. $("#foldin").click(function(){ 
  57. $("#allCity").slideUp(300) 
  58. }); 
  59. }); 
  60. </SCRIPT> 
  61. </body> 
  62. </html> 

另外附上網友的實現方法:

使用方法:解壓后QQWry.Dat就是我們想要IP地址數據庫,我們新建一個ipcity文件夾,將數據庫放在下面。QQ IP數據庫使用非常方便,數據也很齊全,你可以及時關注官方更新以保持數據最新,強力推薦一下:)

接下來,我們在上面的ipcity目錄下新建一個ipaddress.php文件,直接復制以下代碼進去即可,重要的地方也作了相應注釋。B段:

 

 
  1. <? 
  2. /* 
  3. 函數名稱:ipCity 
  4. 參數說明:$userip——用戶IP地址 
  5. 函數功能:PHP通過IP地址判斷用戶所在城市 
  6. author:lee 
  7. contact:[email protected] 
  8. */ 
  9. function ipCity($userip) { 
  10. //IP數據庫路徑,這里用的是QQ IP數據庫 20110405 純真版 
  11. $dat_path = 'QQWry.dat'
  12.  
  13.  
  14.  
  15. //判斷IP地址是否有效 
  16. if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$"$userip)){ 
  17. return 'IP Address Invalid'
  18.  
  19.  
  20.  
  21. //打開IP數據庫 
  22. if(!$fd = @fopen($dat_path'rb')){ 
  23. return 'IP data file not exists or access denied'
  24.  
  25.  
  26.  
  27. //explode函數分解IP地址,運算得出整數形結果 
  28. $userip = explode('.'$userip); 
  29. $useripNum = $userip[0] * 16777216 + $userip[1] * 65536 + $userip[2] * 256 + $userip[3]; 
  30.  
  31.  
  32.  
  33. //獲取IP地址索引開始和結束位置 
  34. $DataBegin = fread($fd, 4); 
  35. $DataEnd = fread($fd, 4); 
  36. $useripbegin = implode('', unpack('L'$DataBegin)); 
  37. if($useripbegin < 0) $useripbegin += pow(2, 32); 
  38. $useripend = implode('', unpack('L'$DataEnd)); 
  39. if($useripend < 0) $useripend += pow(2, 32); 
  40. $useripAllNum = ($useripend - $useripbegin) / 7 + 1; 
  41.  
  42.  
  43.  
  44. $BeginNum = 0; 
  45. $EndNum = $useripAllNum
  46.  
  47.  
  48.  
  49. //使用二分查找法從索引記錄中搜索匹配的IP地址記錄 
  50. while($userip1num>$useripNum || $userip2num<$useripNum) { 
  51. $Middleintval(($EndNum + $BeginNum) / 2); 
  52.  
  53.  
  54.  
  55. //偏移指針到索引位置讀取4個字節 
  56. fseek($fd$useripbegin + 7 * $Middle); 
  57. $useripData1 = fread($fd, 4); 
  58. if(strlen($useripData1) < 4) { 
  59. fclose($fd); 
  60. return 'File Error'
  61. //提取出來的數據轉換成長整形,如果數據是負數則加上2的32次冪 
  62. $userip1num = implode('', unpack('L'$useripData1)); 
  63. if($userip1num < 0) $userip1num += pow(2, 32); 
  64.  
  65.  
  66.  
  67. //提取的長整型數大于我們IP地址則修改結束位置進行下一次循環 
  68. if($userip1num > $useripNum) { 
  69. $EndNum = $Middle
  70. continue
  71.  
  72.  
  73.  
  74. //取完上一個索引后取下一個索引 
  75. $DataSeek = fread($fd, 3); 
  76. if(strlen($DataSeek) < 3) { 
  77. fclose($fd); 
  78. return 'File Error'
  79. $DataSeek = implode('', unpack('L'$DataSeek.chr(0))); 
  80. fseek($fd$DataSeek); 
  81. $useripData2 = fread($fd, 4); 
  82. if(strlen($useripData2) < 4) { 
  83. fclose($fd); 
  84. return 'File Error'
  85. $userip2num = implode('', unpack('L'$useripData2)); 
  86. if($userip2num < 0) $userip2num += pow(2, 32); 
  87.  
  88.  
  89.  
  90. //找不到IP地址對應城市 
  91. if($userip2num < $useripNum) { 
  92. if($Middle == $BeginNum) { 
  93. fclose($fd); 
  94. return 'No Data'
  95. $BeginNum = $Middle
  96.  
  97.  
  98.  
  99. $useripFlag = fread($fd, 1); 
  100. if($useripFlag == chr(1)) { 
  101. $useripSeek = fread($fd, 3); 
  102. if(strlen($useripSeek) < 3) { 
  103. fclose($fd); 
  104. return 'System Error'
  105. $useripSeek = implode('', unpack('L'$useripSeek.chr(0))); 
  106. fseek($fd$useripSeek); 
  107. $useripFlag = fread($fd, 1); 
  108.  
  109.  
  110.  
  111. if($useripFlag == chr(2)) { 
  112. $AddrSeek = fread($fd, 3); 
  113. if(strlen($AddrSeek) < 3) { 
  114. fclose($fd); 
  115. return 'System Error'
  116. $useripFlag = fread($fd, 1); 
  117. if($useripFlag == chr(2)) { 
  118. $AddrSeek2 = fread($fd, 3); 
  119. if(strlen($AddrSeek2) < 3) { 
  120. fclose($fd); 
  121. return 'System Error'
  122. $AddrSeek2 = implode('', unpack('L'$AddrSeek2.chr(0))); 
  123. fseek($fd$AddrSeek2); 
  124. else { 
  125. fseek($fd, -1, SEEK_CUR); 
  126.  
  127.  
  128.  
  129. while(($char = fread($fd, 1)) != chr(0)) 
  130. $useripAddr2 .= $char
  131.  
  132.  
  133.  
  134. $AddrSeek = implode('', unpack('L'$AddrSeek.chr(0))); 
  135. fseek($fd$AddrSeek); 
  136.  
  137.  
  138.  
  139. while(($char = fread($fd, 1)) != chr(0)) 
  140. $useripAddr1 .= $char
  141. else { 
  142. fseek($fd, -1, SEEK_CUR); 
  143. while(($char = fread($fd, 1)) != chr(0)) 
  144. $useripAddr1 .= $char
  145.  
  146.  
  147.  
  148. $useripFlag = fread($fd, 1); 
  149. if($useripFlag == chr(2)) { 
  150. $AddrSeek2 = fread($fd, 3); 
  151. if(strlen($AddrSeek2) < 3) { 
  152. fclose($fd); 
  153. return 'System Error'
  154. $AddrSeek2 = implode('', unpack('L'$AddrSeek2.chr(0))); 
  155. fseek($fd$AddrSeek2); 
  156. else { 
  157. fseek($fd, -1, SEEK_CUR); 
  158. while(($char = fread($fd, 1)) != chr(0)){ 
  159. $useripAddr2 .= $char
  160. fclose($fd); 
  161.  
  162.  
  163.  
  164. //返回IP地址對應的城市結果 
  165. if(preg_match('/http/i'$useripAddr2)) { 
  166. $useripAddr2 = ''
  167. $useripaddr = "$useripAddr1 $useripAddr2"
  168. $useripaddr = preg_replace('/CZ88.Net/is'''$useripaddr); 
  169. $useripaddr = preg_replace('/^s*/is'''$useripaddr); 
  170. $useripaddr = preg_replace('/s*$/is'''$useripaddr); 
  171. if(preg_match('/http/i'$useripaddr) || $useripaddr == '') { 
  172. $useripaddr = 'No Data'
  173.  
  174.  
  175.  
  176. return $useripaddr
  177. ?> 

PHP根據IP地址實現城市切換或跳轉

到這里,其實問題已經很簡單了,用簡單的js就通通搞定。C段如下:

 

 
  1. //根據IP地址跳轉指定頁面js取得城市 
  2. var city='<?echo ipCity($xp_UserIp);?>'
  3.  
  4. //根據IP地址所有城市跳轉到指定頁面 
  5. if(city.indexOf("上海市")>=0){ 
  6. window.location.href="http://shanghai.demo.com/"

將開頭的A段代碼和上面的C段代碼分別放在B段代碼的頭和尾,然后我們在需要跳轉的頁面加入以下代碼:

刷新頁面,是不是達到預想的效果了呢?

以上就是PHP獲取IP地址、PHP根據IP地址判斷城市以及PHP根據IP地址實現城市切換或跳轉的詳細介紹了,事實上,像PHP中通過IP地址自動切換城市就是這個方法的典型應用。舉一反三,我們通過這種方法,也可以實現屏蔽指定IP地址或城市的用戶訪問,自己研究一下吧,也挺簡單的:)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费日本一区二区 | 亚洲精品日韩色噜噜久久五月 | 91 在线免费观看 | 亚洲精品一区二区三区免 | 成人店女老板视频在线看 | 中文字幕免费播放 | 视频一区二区在线观看 | 国产大片在线观看 | 久久综合艹 | 精品少妇v888av | 欧美日韩高清不卡 | 日本不卡一区二区三区在线观看 | 一区二区三区视频在线观看 | 粉嫩蜜桃麻豆免费大片 | 国产亚洲精品久久久久婷婷瑜伽 | www.guochanav.com | 九九热免费视频在线观看 | 亚洲一区二区免费 | 国产69精品久久久久9999不卡免费 | 青青草成人影视 | 亚洲天堂午夜 | 久草久视频 | 美国一级免费视频 | 日本在线视频二区 | 亚洲欧美不卡视频 | 久久精品视频一区二区三区 | 亚洲爱爱图 | 黄色aaa视频 | 视频一区二区中文字幕 | www.国产一区.com | 91av99| 国产午夜亚洲精品午夜鲁丝片 | 免费香蕉成视频成人网 | 国产成人免费高清激情视频 | 成人在线视频黄色 | 一级黄色欧美 | 在线 日本 制服 中文 欧美 | 色毛片 | 免费毛片在线视频 | 亚洲一级电影在线观看 | 激情视频日韩 |