php程序 js判断ip地区根据不同ip输出不同内容(商务通代码)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php程序 js判断ip地区根据不同ip输出不同内容(商务通代码)相关的知识,希望对你有一定的参考价值。

不建议使用js进行这个处理,你这样做的话完整过程为

1. 用户访问php页面

2. 服务端输出html

3. 浏览器运行js检查ip所属区域

4. ajax方式提交区域信息给服务器

5. 服务器返回查询结果

6. js将查询结果显示到当前页面


你想想这要多长时间。因此最好是php端直接判断区域,然后直接查询并输出就行了。

提供一个php写的函数,如果有用望采纳


function getCityByUserIp()
    $ip = false;
    if (isset($_SERVER))
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
            $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
         else if (isset($_SERVER["HTTP_CLIENT_IP"]))
            $ip = $_SERVER["HTTP_CLIENT_IP"];
         else
            $ip = $_SERVER["REMOTE_ADDR"];
        
     else
        if (getenv("HTTP_X_FORWARDED_FOR"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
         else if (getenv("HTTP_CLIENT_IP"))
            $ip = getenv("HTTP_CLIENT_IP");
         else
            $ip = getenv("REMOTE_ADDR");
        
    
    if (false === $ip)
        return false;
    
    $file = fopen(\'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=\' . $ip, \'r\');
    $content = fread($file, 1024);
    fclose($file);
    if (! preg_match("/^var remote_ip_info = (\\\\[^\\\\]+\\\\);$/", $content, $_match))
        return false;
    
    $ipInfo = json_decode($_match[1]);
    return $ipInfo;


返回的数组中包括 country, province, city等,如果返回false表示无法获得ip或该ip没有在大陆地区匹配的记录(港澳台似乎有province,但是没有city)。

参考技术A 1、获取用户的IP
2、判断IP属地,这里推荐一个工具:淘宝IP地址库
3、输出
参考技术B <script src="http://counter.sina.com.cn/ip" type="text/javascript" charset=gb2312></script>
<script>
var sf=ILData[2];
if(sf.indexOf("北京")>=0)
window.location.href="URL";

else if(sf.indexOf("河北")>=0)
window.location.href="URL";

else if(sf.indexOf("天津")>=0)
window.location.href="URL"; //你也可以自己定义成文本内容

</script>

通过view实现智能DNS

<h2>原理介绍</h2>
<p>DNS策略解析最基本的功能是可以智能的判断访问您网站的用户,然后根据不同的访问者把您的域名分别解析成不同的IP地址,然后跟DNS服务器内部的IP表匹配一下,看看用户的类型,然后给用户返回对应的IP地址。例如:一台http服务器在不同地区有不同代理服务器,智能DNS会在用户访问这个http服务器的时候,自动识别用户的IP所在地区和哪个代理服务器最近(根据内部设置的表格识别),然后将代理服务器的IP地址返回给用户让其访问,相当于进行了引导和负载均衡。
如下图所示:
<img src="http://wx2.sinaimg.cn/mw690/9e44f588gy1fjw5s1p7prj212x0o4447.jpg" /></p>
<h2>应用场景</h2>
<h3>双线路的机房:</h3>
<p>服务本身有两个IP,一个电信IP,一个网通IP或者其他线路。</p>
<h3>镜象网站:</h3>
<p>在网通及电信的机房放置多个相同的镜象站点, 让不同的地方客户访问不同的站点。</p>
<h3>负载均衡:</h3>
<p>对于流量比较大的网站,可以把流量分配到几台不同的服务器上,以提高网站速度。</p>
<h3>个性化站点服务:</h3>
<p>比如通过IP表的重新定义, 让国外的客户自动访问英文版的网站; 让国内的客户自动访问中文版的网站。</p>
<h3>CDN加速器:</h3>
<p>通过与squid等WEB缓存软件结合实现CDN加速器。</p>
<h3>防止DDOS攻击:</h3>
<p>通过多个线路分散攻击流量,从而达到抵挡DDOS攻击。</p>
<h2>CDN和智能DNS</h2>
<h3>CDN服务:</h3>
<p>就是把静态页面缓存到不同地区很多台专门的缓存服务器上,然后根据用户线路所在的地区自动选择一个最近的缓存服务器让用户访问,以此提高速度,这种方案对静态页面效果非常好,同时它也需要智能DNS的帮助才能实现把用户引导到离自己最近的缓存服务器上。   </p>
<h3>智能DNS:</h3>
<p>本身并没有加速功能,说白了就是自动识别网通、电信各线路的用户,然后解析到不同的IP,起到一个引导作用。但是由于国内各地域、各系统的网络环境各不相同,并不仅仅是简单的电信、网通两种资源,所以会有域名做了智能DNS后,其用户访问速度反而下降的情况发生。但是使用智能DNS,客户源站是动态还是静态内容则没有影响,效果一样。</p>
<h2>BIND VIEW:</h2>
<p>view:视图,多个zone的组合。
一个bind服务器可定义多个view,每个view中可 义一个或多个zone
每个view用来匹配一组客户端 
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件 </p>
<pre><code>格式: 
    view VIEW_NAME { 
        match-clients { testacl;  }; 
        zone “magedu.com” { 
            type master; 
            file “magedu.com.zone”; }; 
        include “/etc/named.rfc1912.zones”; 
    };
注意: 
    (1) 一旦启用了view,所有的zone都只能定义在view中,包括根zone。
    (2) 仅在允许递归请求的客户端所在view中定义根区域 
    (3) 客户端请求到达时,是自上而下检查每个view所服务 的客户端列表
</code></pre>

<h2>智能DNS的实现</h2>
<p>要利用到调用ACL和view。通过定义的不同ACL来规定不同区域的主机,然后给这些不同的主机分配不同的访问IP地址。
下面用一个小实验来展示智能DNS的实现:通过搭建智能DNS实现来访问www.hhy.com的河南用户和北京用户分别得到不同的服务器IP地址。</p>
<h3>在主配置文件/etc/named.conf规定acl:</h3>
<p><img src="http://wx1.sinaimg.cn/mw690/9e44f588gy1fjw5s27jznj20qf0dgq3m.jpg" /></p>
<h3>在主配置文件/etc/named.conf配置view:</h3>
<p><img src="http://wx1.sinaimg.cn/mw690/9e44f588gy1fjw5s2ojpyj20u10ewgmd.jpg" /></p>
<h3>配置不同用户DNS配置文件:</h3>
<p>北京用户 vim named.rfc1912.zones.bj
<img src="http://wx3.sinaimg.cn/mw690/9e44f588gy1fjw5s335fdj20cw03xt8k.jpg" /></p>
<p>河南用户 vim named.rfc1912.zones.hn
<img src="http://wx2.sinaimg.cn/mw690/9e44f588gy1fjw5s3mjagj20do03tq2s.jpg" /></p>
<h3>配置不同用户的区域数据库文件</h3>
<p>北京用户 vim jzt.com.zone.bj
<img src="http://wx1.sinaimg.cn/mw690/9e44f588gy1fjw5s43gt0j20po0ao74i.jpg" /></p>
<p>河南用户 vim jzt.com.zone.hn
<img src="http://wx4.sinaimg.cn/mw690/9e44f588gy1fjw5s4pc74j20pu0af74i.jpg" /></p>
<h3>检查配置</h3>
<p><img src="http://wx3.sinaimg.cn/mw690/9e44f588gy1fjw5s53b1kj20tx05udg0.jpg" /></p>
<h3>在客户端进行测试</h3>
<p><img src="http://wx1.sinaimg.cn/mw690/9e44f588gy1fjw5s5o908j20uc0jlq3u.jpg" /></p>
<h2>后记</h2>
<p>虽然这个实验相对来说比较简单,但是想要深刻了解和理解DNS的工作原理以及智能DNS的详细技术,还需要我们进行更像详细和深刻的学习。本文只是一个引导大家进入这个世界的一条小路罢了。</p>


本文出自 “13114160” 博客,转载请与作者联系!

以上是关于php程序 js判断ip地区根据不同ip输出不同内容(商务通代码)的主要内容,如果未能解决你的问题,请参考以下文章

通过view实现智能DNS

Openresty + GeoIP2实现IP归属国家查询

Openresty + GeoIP2实现IP归属国家查询

Openresty + GeoIP2实现IP归属国家查询

Openresty + GeoIP2实现IP归属国家查询

控制依赖于地理 IP 的 HTML 元素