亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 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:xpsem2010@gmail.com 
  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地址或城市的用戶訪問,自己研究一下吧,也挺簡單的:)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久操成人在线视频| 欧美电影免费观看高清完整| 久久久www成人免费精品| 2018中文字幕一区二区三区| 国产亚洲精品高潮| 91精品久久久久久久久| 亚洲男人第一av网站| 欧美精品久久久久| 欧美极品美女视频网站在线观看免费| 日韩免费看的电影电视剧大全| 欧美天天综合色影久久精品| 欧美精品videofree1080p| 国产精品视频网站| 伊人男人综合视频网| 欧美天堂在线观看| 色一情一乱一区二区| 国产精品一区二区三区久久久| 7777精品久久久久久| 国产精品一区二区久久精品| 久久免费高清视频| 九九热99久久久国产盗摄| 热久久美女精品天天吊色| 国产精品爽黄69| 亚洲免费影视第一页| 亚洲区免费影片| 欧美激情成人在线视频| 精品中文视频在线| 久久久久久国产免费| 最近2019年好看中文字幕视频| 亚洲第一网中文字幕| 日本精品免费观看| 日韩高清欧美高清| 亚洲欧美国产日韩天堂区| 久久九九国产精品怡红院| 777777777亚洲妇女| 亚洲精品一区二三区不卡| 亚洲人成网7777777国产| 免费不卡欧美自拍视频| 粉嫩av一区二区三区免费野| 国产精品久久久久久久久久免费| 91成人在线播放| 日本成人在线视频网址| 91亚洲va在线va天堂va国| 欧美wwwwww| 欧美国产欧美亚洲国产日韩mv天天看完整| 疯狂蹂躏欧美一区二区精品| 欧洲美女免费图片一区| 欧美亚洲成人精品| 成人高清视频观看www| 亚洲人成欧美中文字幕| 欧美成人免费大片| 欧美日韩国产精品一区| 欧美一级淫片播放口| 91免费电影网站| 欧美一区亚洲一区| 国产a级全部精品| 亚洲精品v欧美精品v日韩精品| 欧美日韩加勒比精品一区| 久久久久久久成人| 91成人在线播放| 欧美性猛xxx| 欧美日韩免费在线| 欧美猛交ⅹxxx乱大交视频| 欧美专区在线观看| 尤物九九久久国产精品的分类| 久久国产精品久久国产精品| 亚洲视屏在线播放| 国产精品久久电影观看| 成人在线激情视频| 久久成人综合视频| 国产美女扒开尿口久久久| 中文字幕日韩精品在线观看| 国自产精品手机在线观看视频| 91在线观看免费高清完整版在线观看| 精品国产999| 亚洲夜晚福利在线观看| 日本国产一区二区三区| 国产精品久久久久久久久粉嫩av| 美女视频久久黄| 欧美在线一级视频| 亚洲黄色有码视频| 国产一区私人高清影院| 国产精品男女猛烈高潮激情| 中文一区二区视频| 2019av中文字幕| 夜夜嗨av一区二区三区免费区| 国产精品狠色婷| 高清一区二区三区四区五区| 久久夜色精品亚洲噜噜国产mv| 96sao精品视频在线观看| 久久久久久久999精品视频| 97国产精品视频人人做人人爱| 一区二区成人精品| 欧美野外猛男的大粗鳮| y97精品国产97久久久久久| 成人久久精品视频| 日韩电影网在线| 亚洲国产古装精品网站| 青青草原一区二区| 亚洲欧美日韩精品久久| 黑人与娇小精品av专区| 三级精品视频久久久久| 国产成人jvid在线播放| 亚洲自拍偷拍福利| 日韩av片永久免费网站| 色婷婷成人综合| 日韩欧美在线第一页| 亚洲成人国产精品| 久久在精品线影院精品国产| 久久久久久久国产精品视频| 欧美大成色www永久网站婷| 精品福利在线视频| 精品国产一区二区在线| 久久久久一本一区二区青青蜜月| 欧美在线观看www| 亚洲日本成人女熟在线观看| 欧美福利视频网站| 国精产品一区一区三区有限在线| 国产精品com| 在线观看欧美成人| 精品福利一区二区| 色综合伊人色综合网站| 中文字幕精品久久| 亚洲欧美在线播放| 亚洲视频一区二区三区| 国内精品免费午夜毛片| 亚洲欧美精品一区| 久久综合电影一区| 国产成人a亚洲精品| 欧美成人精品一区| 69av视频在线播放| 精品亚洲夜色av98在线观看| 亚洲自拍偷拍福利| 国产91精品在线播放| 热久久这里只有| 久久精品国产欧美激情| 亚洲人成绝费网站色www| 日韩理论片久久| 亚洲欧美中文在线视频| 成人精品网站在线观看| 粗暴蹂躏中文一区二区三区| 国产精品九九九| 国产精品高清免费在线观看| 国产va免费精品高清在线| 美女啪啪无遮挡免费久久网站| 最近免费中文字幕视频2019| 亚洲人成五月天| 亚洲欧美制服第一页| 最近2019中文字幕第三页视频| 操人视频在线观看欧美| 亚洲综合在线中文字幕| 久久视频在线免费观看| 成人免费黄色网| 97超视频免费观看| 欧美在线观看一区二区三区| 欧美精品激情在线观看| 九九久久国产精品| 欧美激情精品久久久久久免费印度| 亚洲综合成人婷婷小说| 亚洲国产精品一区二区久| 91欧美精品成人综合在线观看| 国产不卡av在线| 国产亚洲精品美女久久久| 亚洲的天堂在线中文字幕|