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

PHP 獲取訪客語言、瀏覽器、作業系統、IP、地理位置與 ISP 完整類別

     編輯:PHP 相關知識

PHP 獲取訪客語言、瀏覽器、作業系統、IP、地理位置與 ISP 完整類別

封裝一個 class_guest_info 類別,從 $_SERVER 解析訪客環境資訊,並呼叫百度隱藏 API 取得地理位置與 ISP。

類別完整代碼

<?php
class class_guest_info {
    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';
    }

    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';
    }

    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';
    }

    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];
    }

    private function GetAddIsp() {
        $ip = $this->GetIP();
        $content = file_get_contents('https://open.baidu.com/ipsearch/stn=ipjson&wd=' . $ip);
        $content = mb_convert_encoding($content, 'UTF-8', 'GBK');
        if (preg_match('/noresult/i', $content)) return ['None'];
        $start = stripos($content, $ip) + strlen($ip) + strlen('來自');
        $len = stripos($content, '"}') - $start;
        $info = substr($content, $start, $len);
        return explode(' ', $info);
    }

    function GetAdd() {
        $arr = $this->GetAddIsp();
        return $arr[0];
    }

    function GetIsp() {
        $arr = $this->GetAddIsp();
        return ($arr[0] !== 'None' && isset($arr[1])) ? $arr[1] : 'None';
    }
}
?>

使用範例

$obj = new class_guest_info;
echo "語言:" . $obj->GetLang() . "<br>";
echo "瀏覽器:" . $obj->GetBrowser() . "<br>";
echo "作業系統:" . $obj->GetOS() . "<br>";
echo "IP:" . $obj->GetIP() . "<br>";
echo "地理位置:" . $obj->GetAdd() . "<br>";
echo "ISP:" . $obj->GetIsp() . "<br>";

注意事項

  • 百度 API 非官方公開介面,可能隨時失效,生產環境建議使用成熟的 IP 地理位置服務(如 MaxMind GeoIP2、ipapi.co 等)。
  • file_get_contents 需開啟 allow_url_fopen,或改用 cURL 以支援超時控制。
  • 代理/VPN 環境下 IP 判斷邏輯需更嚴謹(參考 HTTP_X_FORWARDED_FOR 第一個非私有 IP)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved