萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 透過淘寶 IP API 依 IP 查詢城市等地理位置資訊

使用淘寶免費 IP 定位 API(https://ip.taobao.com/service/getIpInfo.php)快速取得訪客城市、ISP 等資訊,含完整封裝函式與跨代理取真實 IP 方法。

取得客戶端真實 IP

function getRealIp() {
    $headers = [
        'HTTP_CLIENT_IP',
        'HTTP_X_FORWARDED_FOR',
        'REMOTE_ADDR'
    ];
    foreach ($headers as $header) {
        if (!empty($_SERVER[$header]) && strcasecmp($_SERVER[$header], 'unknown')) {
            // X-Forwarded-For 可能包含多個 IP,取第一個
            $ips = explode(',', $_SERVER[$header]);
            return trim($ips[0]);
        }
    }
    return 'unknown';
}

呼叫淘寶 API 解析地理位置

function getLocationByIp($ip) {
    $url = "https://ip.taobao.com/service/getIpInfo.php?ip=$ip";
    $json = @file_get_contents($url);
    if (!$json) return false;
    
    $data = json_decode($json, true);
    if (($data['code'] ?? 1) !== 0) return false;
    
    return $data['data'] ?? false;
}

// 使用範例
$ip = getRealIp();
$location = getLocationByIp($ip);
if ($location) {
    echo "國家:{$location['country']}
"; echo "地區:{$location['area']}
"; echo "省份:{$location['region']}
"; echo "城市:{$location['city']}
"; echo "ISP:{$location['isp']}
"; } else { echo "無法解析 IP 位置"; }

回傳資料結構範例

Array
(
    [code] => 0
    [data] => Array
        (
            [country] => 中國
            [country_id] => CN
            [area] => 華南
            [area_id] => 800000
            [region] => 廣東省
            [region_id] => 440000
            [city] => 深圳市
            [city_id] => 440300
            [county] => 
            [county_id] => -1
            [isp] => 電信
            [isp_id] => 100017
            [ip] => 183.16.191.102
        )
)

注意事項

  • 淘寶 API 有頻率限制,高流量建議自建 IP 庫(如 MaxMind GeoIP2)。
  • API 回傳編碼為 UTF-8,確保專案編碼一致。
  • HTTPS 站點下呼叫 HTTP API 會被瀏覽器阻擋(混合內容),伺服器端 file_get_contents 不受影響。
  • 生產環境建議加入快取(Redis/Memcached)減少外部請求。
copyright © 萬盛學電腦網 all rights reserved