文章目錄
- 在 PHP 通過 IP 區分國家
- 在 WordPress 中通過 IP 區分國家
- 總結
在 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 判斷訪客來源十分精準的, 現在一些外貿網站都是通過這個方法向使用者進行展示區分, 比如美國地區的使用者預設看到美國能買到的商品和美國物流資訊. 但不是百分之百的準確, 比如某人常年翻牆, 那他可能一直看不到本國的資訊. 至於是否需要區分處理, 網站主要有所考慮.
可能有人會問, 加這麼個東西, 效能如何? 會不會要求強大的伺服器? 我測試過, 正常的伺服器上幾乎不影響頁面載入效能, 可以看看這個部落格的速度. 如果不放心, 自己測一下.