首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP GeoIP 使用教程:免費數據庫與擴展兩種方案完整指南

     編輯:PHP 綜合知識

GeoIP 技術能根據訪客 IP 地址定位其國家、城市乃至經緯度。關鍵在於擁有準確的 IP 地址數據庫。本文介紹兩種在 PHP 中使用 GeoIP 的主流方案:純 PHP 庫與 PECL 擴展。

方案一:純 PHP 庫(geoip.inc)

適合無法安裝擴展的虛擬主機環境。

  1. 下載免費數據庫 GeoIP.dat.gz,解壓得 GeoIP.dat
  2. 下載 geoip.inc.php 庫文件
  3. 代碼示例:
<?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 測試。

方案二:PECL GeoIP 擴展(高性能、功能豐富)

適合擁有服務器控制權的生產環境,支援城市級定位(需 GeoLiteCity.dat)。

  1. 安裝系統依賴(CentOS/RHEL 為例):
    yum install GeoIP GeoIP-data GeoIP-devel
  2. 下載並部署城市數據庫:
    wget https://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
    gzip -d GeoLiteCity.dat.gz
    mv GeoLiteCity.dat /var/lib/GeoIP/GeoIPCity.dat
  3. 編譯安裝 PECL 擴展:
    wget 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 install
  4. 啟用擴展:在 php.ini 添加 extension=geoip.so,重啟 PHP-FPM/Apache

擴展模式下的豐富 API

安裝成功後可直接使用 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 免費數據庫以保證準確性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved