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

PHP 獲取瀏覽器資訊與客戶端地理位置的實用方法

     編輯:PHP 綜合知識

一、封裝獲取訪客資訊的 PHP 類別

開發一個功能完善的 guest_info 類別,能夠輕鬆獲取訪客的語言偏好、瀏覽器類型、作業系統、IP 位址,甚至地理位置與 ISP 資訊。以下是核心程式碼實現:

<?php
/**
 * 訪客資訊獲取類別
 * 提供:語言、瀏覽器、作業系統、IP、地理位置、ISP
 */
class guest_info {
    /** 獲取訪客語言:簡體中文、繁體中文、English */
    function getlang() {
        $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4);
        if (preg_match('/zh-c/i', $lang)) return '簡體中文';
        elseif (preg_match('/zh/i', $lang)) return '繁體中文';
        else return 'English';
    }

    /** 獲取瀏覽器類型:msie、firefox、chrome、safari、opera、other */
    function getbrowser() {
        $ua = $_SERVER['HTTP_USER_AGENT'];
        if (preg_match('/msie/i', $ua)) return 'msie';
        elseif (preg_match('/firefox/i', $ua)) return 'firefox';
        elseif (preg_match('/chrome/i', $ua)) return 'chrome';
        elseif (preg_match('/safari/i', $ua)) return 'safari';
        elseif (preg_match('/opera/i', $ua)) return 'opera';
        else return 'other';
    }

    /** 獲取作業系統:windows、mac、linux、unix、bsd、other */
    function getos() {
        $ua = $_SERVER['HTTP_USER_AGENT'];
        if (preg_match('/win/i', $ua)) return 'windows';
        elseif (preg_match('/mac/i', $ua)) return 'mac';
        elseif (preg_match('/linux/i', $ua)) return 'linux';
        elseif (preg_match('/unix/i', $ua)) return 'unix';
        elseif (preg_match('/bsd/i', $ua)) return 'bsd';
        else return 'other';
    }

    /** 獲取真實 IP 位址(支援代理) */
    function getip() {
        if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
            $ip = explode(',', $_SERVER['HTTP_CLIENT_IP']);
        } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        } elseif (!empty($_SERVER['REMOTE_ADDR'])) {
            $ip = explode(',', $_SERVER['REMOTE_ADDR']);
        } else {
            $ip[0] = 'none';
        }
        return $ip[0];
    }
}

// 使用範例
$obj = new guest_info();
echo $obj->getlang();    // 訪客語言
echo $obj->getbrowser(); // 瀏覽器
echo $obj->getos();      // 作業系統
echo $obj->getip();      // IP 位址
?>

二、利用騰訊 IP 分享計劃查詢地理位置

透過 cURL 請求騰訊的 IP 查詢介面,解析回傳的 GB2312 編碼頁面並轉為 UTF-8:

<?php
function getiploc_qq($queryip) {
    $url = 'https://ip.qq.com/cgi-bin/searchip?searchip1=' . $queryip;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_ENCODING, 'gb2312');
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result = curl_exec($ch);
    $result = mb_convert_encoding($result, 'utf-8', 'gb2312');
    curl_close($ch);
    preg_match('@<span>(.*)</span></p>@iu', $result, $iparray);
    return $iparray[1] ?? '';
}

// 使用範例
echo getiploc_qq('183.37.209.57');
?>

三、呼叫新浪 IP 查詢介面 (JSON 格式)

新浪提供結構化的 JSON 回應,解析更方便:

<?php
function getiploc_sina($queryip) {
    $url = 'https://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=' . $queryip;
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_ENCODING, 'utf8');
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $location = curl_exec($ch);
    $location = json_decode($location);
    curl_close($ch);
    if ($location === false) return '';
    $loc = '';
    if (empty($location->desc)) {
        $loc = $location->province . $location->city . $location->district . $location->isp;
    } else {
        $loc = $location->desc;
    }
    return $loc;
}

echo getiploc_sina('183.37.209.57');
?>

提示: 實際專案中建議加入快取機制,避免頻繁呼叫外部 API 影響效能。

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