在 PHP 通过 IP 区分国家
如何用 PHP 通过 IP 区分国家和地区呢? Maxmind.com 提供一套 GeoIP 的解决方案, 只需要简单几步即可在 PHP 中通过 IP 判断访客的国家.
1. 下载数据库和 PHP 库文件
- 下载 GeoID.dat.gz, 解压为 GeoIP.dat 文件.
- 下载 geoip.inc.
2. 通过 PHP 代码获取国家信息
以下是一段示范代码, 演示如何获取国家代号和国家名称.
<?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 文件内容如下.
<?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 文件, 在文件顶部加入代码如下.
<?php include('include/geoip.php'); ?>
4. 使用国家代号
在主题中调用代码, 例子如下.
<?php global $countryCode; if($countryCode == 'CN') { // 中国大陆地区执行的代码 } else if($countryCode == 'US') { // 美国地区执行的代码 } else { // 中国大陆和美国以外地区执行的代码 } ?>
总结
通过 IP 判断访客来源十分精准的, 现在一些外贸网站都是通过这个方法向用户进行展示区分, 比如美国地区的用户默认看到美国能买到的商品和美国物流信息. 但不是百分之百的准确, 比如某人常年FQ, 那他可能一直看不到本国的信息. 至于是否需要区分处理, 网站主要有所考虑.
可能有人会问, 加这么个东西, 性能如何? 会不会要求强大的服务器? 我测试过, 正常的服务器上几乎不影响页面加载性能, 可以看看这个博客的速度. 如果不放心, 自己测一下.