GeoIP 技術能根據訪客 IP 地址定位其國家、城市乃至經緯度。關鍵在於擁有準確的 IP 地址數據庫。本文介紹兩種在 PHP 中使用 GeoIP 的主流方案:純 PHP 庫與 PECL 擴展。
適合無法安裝擴展的虛擬主機環境。
GeoIP.dat.gz,解壓得 GeoIP.datgeoip.inc.php 庫文件<?php
include('geoip.inc.php');
// 打開數據文件(GEOIP_STANDARD 為標準模式,GEOIP_MEMORY_CACHE 可載入內存加速)
$gi = geoip_open('GeoIP.dat', GEOIP_STANDARD);
// 獲取國家代碼(如 CN, US)
$countryCode = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
echo "國家代碼:$countryCode <br>";
// 獲取國家名稱
$countryName = geoip_country_name_by_addr($gi, $_SERVER['REMOTE_ADDR']);
echo "國家名稱:$countryName <br>";
geoip_close($gi);
?>
注意:本地測試時$_SERVER['REMOTE_ADDR']為127.0.0.1,無法獲取有效結果,請手動指定公網 IP 測試。
適合擁有服務器控制權的生產環境,支援城市級定位(需 GeoLiteCity.dat)。
yum install GeoIP GeoIP-data GeoIP-develwget https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gzip -d GeoLiteCity.dat.gz
mv GeoLiteCity.dat /var/lib/GeoIP/GeoIPCity.datwget https://pecl.php.net/get/geoip-1.0.7.tgz
tar -zxvf geoip-1.0.7.tgz && cd geoip-1.0.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-geoip
make && make installphp.ini 添加 extension=geoip.so,重啟 PHP-FPM/Apache安裝成功後可直接使用 PHP 手冊中的 GeoIP 函數族,如:
geoip_country_code_by_name()geoip_region_by_name()geoip_city_info_by_name()(城市級:經緯度、郵編、時區等)geoip_org_by_name()(ISP/組織信息)| 維度 | 純 PHP 庫 | PECL 擴展 |
|---|---|---|
| 部署難度 | 極低(僅需文件) | 需編譯、系統庫支援 |
| 性能 | 一般(文件 I/O) | 高(內存映射、C 級優化) |
| 功能豐富度 | 僅國家級 | 支援城市、ISP、經緯度等 |
| 適用場景 | 虛擬主機、快速原型 | 生產環境、高併發、精準定位 |
根據項目實際環境與需求選擇合適方案,並定期更新 MaxMind 免費數據庫以保證準確性。