下载并安装
Maxmind’s GeoLite Country数据库,其中99.5%的准确性要求.您可以支付升级到付费版本,声称的99.8%的准确性.有关如何使用PHP的数据库有四个选项:
原文链接:https://www.f2er.com/php/131145.html>下载CSV文件并将其导入到您选择的sql数据库中.这是最慢的选择,并且有一个丑陋的API.我不会推荐它,但它包括为了完整性.
>下载一个可以读取数据库文件的纯PHP类.这提供了一个比sql选项更好的API,但仍然有点慢.有PHP4和PHP5的版本
>下载并安装C extension module for PHP.这具有nice interface的优点和良好的性能.然而,比纯PHP类更难安装,所以您可能需要向您的托管公司查询.如果你幸运的话,可能已经安装好了.
>如果您需要快速的表现,请与Apache module一起使用.这是最难安装的,也是最快的选择.
所有这些选项都有一个获取国家/地区代码的方法.我不会包括sql选项,但可以获得more info here.
纯PHP4:
include("geoip.inc"); $gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD); $code = geoip_country_code_by_addr($gi,"24.24.24.24");
PECL PHP扩展:
$code = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
Apache模块:
$code = apache_note("GEOIP_COUNTRY_CODE");
$redirect = array("AU" => "http://australia.example.com","NZ" => "http://newzealand.example.com") $url = $redirect[$code] header("Location: $url");
这会导致两个HTTP请求,因此不是最佳的.更好的方法是在.htaccess文件中使用Apache模块进行重写:
GeoIPEnable On GeoIPDBFile /path/to/GeoIP.dat # Redirect one country RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^CA RewriteRule ^(.*)$http://www.canada.com$1 [L] # Redirect multiple countries to a single page RewriteEngine on RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^(CA|US|MX)$ RewriteRule ^(.*)$http://www.northamerica.com$1 [L]
当然,可以这样做的一个更好的办法是让别人在DNS层面为你做这个.一个快速的搜索显示this company,(我不知道他们是否好)毫无疑问有其他人.这是Google做的.