封裝一個 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>";
file_get_contents 需開啟 allow_url_fopen,或改用 cURL 以支援超時控制。HTTP_X_FORWARDED_FOR 第一個非私有 IP)。