工作室注册登录标签云赞助光荣榜

当前位置:首页 > 全栈分享 > php+mysql > 正文

屏蔽地域、识别终端和判断搜索引擎来源的PHP代码

发布时间:2017-11-30 21:52:04作者:魏义齐阅读:()评论:

本文为博主原创文章,未经博主允许不得转载、摘编或利用其它方式使用本博客内容。

这是一段集屏蔽地域、识别终端和判断搜索引擎来源于一体的PHP代码,具体的功能请看我下面的分析:

2018年12月22日补充:文中新浪的ip库接口失效,使用时请换成别家的接口。

废话不多说,先把代码张贴出来:

  1. <?php 
  2. error_reporting( 0 ); 
  3. $webSiteQueryParams = $_SERVER[ 'QUERY_STRING' ]; 
  4.  
  5. function GetIP() { 
  6.     if ( getenv( 'HTTP_CLIENT_IP' ) && strcasecmp( getenv( 'HTTP_CLIENT_IP' ), 'unknown' ) ) { 
  7.         $ip = getenv( 'HTTP_CLIENT_IP' ); 
  8.     } else if ( getenv( 'HTTP_X_FORWARDED_FOR' ) && strcasecmp( getenv( 'HTTP_X_FORWARDED_FOR' ), 'unknown' ) ) { 
  9.         $ip = getenv( 'HTTP_X_FORWARDED_FOR' ); 
  10.     } else if ( getenv( 'REMOTE_ADDR' ) && strcasecmp( getenv( 'REMOTE_ADDR' ), 'unknown' ) ) { 
  11.         $ip = getenv( 'REMOTE_ADDR' ); 
  12.     } else if ( isset( $_SERVER[ 'REMOTE_ADDR' ] ) && $_SERVER[ 'REMOTE_ADDR' ] && strcasecmp( $_SERVER[ 'REMOTE_ADDR' ], 'unknown' ) ) { 
  13.         $ip = $_SERVER[ 'REMOTE_ADDR' ]; 
  14.     } else { 
  15.         $ip = 'unknown'; 
  16.     } 
  17.     return ( $ip ); 
  18. } 
  19.  
  20. function GetOS() { 
  21.     if ( !emptyempty( $_SERVER[ 'HTTP_USER_AGENT' ] ) ) { 
  22.         $OS = $_SERVER[ 'HTTP_USER_AGENT' ]; 
  23.         if ( strpos( $OS, 'Windows NT' ) !== false ) { 
  24.             $OS = 'pc'; 
  25.         } elseif ( strpos( $OS, 'Macintosh' ) !== false ) { 
  26.             $OS = 'pc'; 
  27.         } elseif ( preg_match( '/(Android|iPhone|iPad|iPod|Windows Phone|Windows CE|Symbian|SymbianOS|BlackBerry|Palm|MIUI|Flyme|Funtouch|Color|Smartisan| 
  28. SAMSUNG|HTC|LG|Nokia|Sony|SonyEricsson|Nexus|Motorola|MOT-|MI |Meizu|OPPO|vivo|Huawei|ZTE-|Lenovo|Coolpad|ELIFE|Nubia| 
  29. TCL|SHARP|SIE-|Panasonic|Alcatel|Philips|Kindle|UCWEB|Opera|netfront|UP.Browser|UP.Link|CLDC|MIDP|MMP|WAP|Mobile)/i', $OS ) ) { 
  30.             $OS = 'wap'; 
  31.         } else { 
  32.             $OS = 'pc'; 
  33.         } 
  34.         return $OS; 
  35.     } else { 
  36.         return 'pc'; 
  37.     } 
  38. } 
  39.  
  40. function GetREF() { 
  41.     if ( !emptyempty( $_SERVER[ 'HTTP_REFERER' ] ) ) { 
  42.         $ref = $_SERVER[ 'HTTP_REFERER' ]; 
  43.         return $ref; 
  44.     } else { 
  45.         return 'null'; 
  46.     } 
  47. } 
  48. $ip = GetIP(); 
  49. $OS = GetOS(); 
  50. $ref = GetREF(); 
  51. $ch = curl_init(); 
  52. curl_setopt( $ch, CURLOPT_URL, 'https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip ); 
  53. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 ); 
  54. curl_setopt( $ch, CURLOPT_TIMEOUT, 5 ); 
  55. $uncity = curl_exec( $ch ); 
  56. curl_close( $ch ); 
  57. $cncity = preg_replace( "#///u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'GB2312', pack('H4', '//1'))", $uncity ); 
  58. if ( 'wap' == $OS ) { 
  59.     if ( strstr( $ip, '220.181.132' ) || strstr( $ip, '218.30.' ) || strstr( $ip, '119.4.' ) || strstr( $ip, '114.111.166' ) || strstr( $ip, '117.146.' ) || strstr( $ip, '101.199' ) || strstr( $ip, '118.186.' ) || strstr( $ip, '106.120.182.' ) || strstr( $ip, '106.38.' ) || strstr( $ip, '119.4.' ) || strstr( $ip, '120.192.179.99' ) || strstr( $ip, '101.199.' ) || strstr( $ip, '61.135.' ) || strstr( $ip, '220.181.' ) || strstr( $ref, 'qihoo.net' ) || 
  60.         strstr( $OS, 'Other' ) || strstr( $ref, '=site%3A' ) ) { 
  61.         require( '404/index.htm' ); 
  62.         die; 
  63.     } 
  64.     //elseif (strstr($ref, 'baidu.com') || strstr($ref, 'sogou.com'))   //判断搜索引擎来源 
  65.     elseif ( 1 ) { 
  66.         if ( strstr( $cncity, '北京' ) || strstr( $cncity, '天津' ) || strstr( $cncity, '上海' ) || strstr( $cncity, '广州' ) || strstr( $cncity, '深圳' ) ) { 
  67.             require( 'test/index.html' ); 
  68.             die; 
  69.         } else { 
  70.             header( "Location: shenhe/index.html?$webSiteQueryParams" ); 
  71.             die; 
  72.         } 
  73.     } else { 
  74.         require( 'test/index.html' ); 
  75.         die; 
  76.     } 
  77. } else { 
  78.     require( 'test/index.html' ); 
  79.     die; 
  80. } 
  81. ?> 

使用方法:跟根目录下的站点文件夹并列放在一起,需要修改的只是代码中加粗的部分(具体的大家自行测试,在这解释不明白,解释明白了不一定所有人都能看明白,直接测试看效果即可),可达到的效果是:屏蔽地域和非屏蔽地域的pc打开的页面是一样的;非屏蔽地域的手机用户打开的页面才是真正需要的页面,如果不能理解,找个服务器测试一下就知道了。

优点:相对于普通的js跳转,本代码可以实现同一个链接不同地域和不同终端打开不是同一个页面,而且这个链接后面不用加根目录下文件夹的名称。

本文标签:,您可以阅读与「」相关的所有文章

魏义齐全栈技术交流:魏义齐全栈技术交流群

上一篇:返回列表下一篇:如何修改phpmyadmin对导入sql文件的大小限制

原创不易,您的赞助就是博主更新的动力!

赞助请备注,8.88元及以上可在赞助光荣榜留下外链信息。

HashOver畅言云评完全自托管的评论系统

工作室注册登录标签云赞助光荣榜

最新会员
  • 东方星雨
  • deanhan
  • 1264822519
  • aini3311
  • a1051020101
  • weiyiqi