gpt4 book ai didi

在WordPress中使用PHP脚本来判断访客来自什么国家

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 33 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在WordPress中使用PHP脚本来判断访客来自什么国家由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

区分访客国家有什么用?

这里是几个我利用该功能的例子. 。

1.区分网站功能 这个博客有翻译文章的功能, 这是为了方便海外访客阅读文章, 但对中国人显得十分多余. 所以我通过 IP 判断国家, 对中国大陆地区屏蔽翻译功能. 。

2.区分展示广告 比如中国大陆地区在侧边栏最下方看到的是拿福能的广告, 而其他地区看到的是 Google 的广告. hostucan 是我的一个广告主, 有英文网站, 也有中文网站, 所以我可以向他提供区分展示服务, 免得浪费流量. 。

3.屏蔽布点服务 海外有很多好的服务平台, 在网站上布点即可采集数据和分享文章. 但很不幸, 因为某些原因, 他们在国内展示效果并不好, 不但没有起到应有效果, 还让页面加载时间变长. 可以对大陆访客屏蔽这些布点. 。

在 PHP 通过 IP 区分国家 。

如何用 PHP 通过 IP 区分国家和地区呢? Maxmind.com 提供一套 GeoIP 的解决方案, 只需要简单几步即可在 PHP 中通过 IP 判断访客的国家. 。

1. 下载数据库和 PHP 库文件 。

下载 GeoID.dat.gz, 解压为 GeoIP.dat 文件. 下载 geoip.inc. 2. 通过 PHP 代码获取国家信息 以下是一段示范代码, 演示如何获取国家代号和国家名称. 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
// 引入 PHP 库文件
include ( "geoip.inc" );
 
// 打开本地数据库, 数据保存在 GeoIP 文件中.
$geoData = geoip_open( 'GeoIP.dat' , GEOIP_STANDARD);
 
// 获取国家 IP
$countryCode = geoip_country_code_by_addr( $geoData , $_SERVER [ 'REMOTE_ADDR' ]);
 
// 获取国家名称
$countryName = geoip_country_name_by_addr( $geoData , $_SERVER [ 'REMOTE_ADDR' ]);
 
// 关闭本地数据库
geoip_close( $geoData );
 
?>

在 WordPress 中通过 IP 区分国家 。

既然 PHP 上使用没问题, WordPress 肯定也是 Okay 的. 看看我是怎么使用的. 。

1. 放置数据库文件 将 GeoIP.dat 解压到 WordPress 根目录中. (你可以在这个目录找到 wp-config.php 或者 wp-config-sample.php 文件) 。

2. 编写调用接口 在主题目录中新建文件夹 include, 将 geoip.inc 放置在新建文件夹中. 并在该文件夹新建文件 geoip.php 文件内容如下. 。

?
1
2
3
4
5
6
7
8
9
10
11
<?php
 
include ( 'geoip.inc' );
 
global $countryCode ;
 
$geoData = geoip_open( 'GeoIP.dat' , GEOIP_STANDARD);
$countryCode = geoip_country_code_by_addr( $geoData , $_SERVER [ 'REMOTE_ADDR' ]);
geoip_close( $geoData );
 
?>

这里只取国家代号作为判别依据. 并且国家代号是全局变量, 以避免页面多处判断需要反复访问 GeoIP.dat 获取信息, 减少程序开销. 。

2. 调用接口, 获取国家代号 3. 打开 header.php 文件, 在文件顶部加入代码如下. 。

?
1
<?php include ( 'include/geoip.php' ); ?>

4. 使用国家代号 在主题中调用代码, 例子如下. 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
global $countryCode ;
 
if ( $countryCode == 'CN' ) {
  // 中国大陆地区执行的代码
} else if ( $countryCode == 'US' ) {
  // 美国地区执行的代码
} else {
  // 中国大陆和美国以外地区执行的代码
}
 
?>

可能有人会问, 加这么个东西, 性能如何? 会不会要求强大的服务器? 我测试过, 正常的服务器上几乎不影响页面加载性能, 可以看看这个博客的速度. 如果不放心, 自己测一下. 。

PS:采用IP查询API接口 国内不少互联网公司例如腾讯、新浪以及淘宝都有IP查询接口,直接调用查询即可.

(1)腾讯IP分享计划 。

复制代码 代码如下:

/**根据腾讯IP分享计划的地址获取IP所在地,比较精确*/function getIPLoc_QQ($ip1){$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$ip1;$ch = curl_init($url);curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');curl_setopt($ch, CURLOPT_TIMEOUT, 10);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回$result = curl_exec($ch);$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码curl_close($ch);preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);$loc = $ipArray[1];return $loc;}

  。

(2)新浪IP查询接口 。

复制代码 代码如下:

/**根据新浪IP查询接口获取IP所在地*/function getIPLoc_sina($ip1){$url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$ip1;$ch = curl_init($url);//curl_setopt($ch,CURLOPT_ENCODING ,'utf8');curl_setopt($ch, CURLOPT_TIMEOUT, 10);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回$location = curl_exec($ch);$location = json_decode($location);curl_close($ch); $loc = "";if($location===FALSE) return "";if (emptyempty($location->desc)) {$loc = $location->province.$location->city.$location->district.$location->isp;}else{$loc = $location->desc;}return $loc;}

  。

(3)使用淘宝IP接口 。

复制代码 代码如下:

/** * 根据淘宝IP查询接口获取IP所在地 */function getCity($ip){$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;$ip=json_decode(file_get_contents($url));if((string)$ip->code=='1'){ return false; } $data = (array)$ip->data;return $data;}

  。

总结 。

通过 IP 判断访客来源十分精准的, 现在一些外贸网站都是通过这个方法向用户进行展示区分, 比如美国地区的用户默认看到美国能买到的商品和美国物流信息. 但不是百分之百的准确, 比如某人常年翻墙, 那他可能一直看不到本国的信息. 至于是否需要区分处理, 网站主要有所考虑. 。

最后此篇关于在WordPress中使用PHP脚本来判断访客来自什么国家的文章就讲到这里了,如果你想了解更多关于在WordPress中使用PHP脚本来判断访客来自什么国家的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com