获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备
/** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } else if (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } else if (getenv('REMOTE_ADDR')) { $ip = getenv('REMOTE_ADDR'); } else { $ip = $_SERVER['REMOTE_ADDR']; } $ips = explode(',', $ip); if (count($ips) > 1) { $ip = $ips[0]; } return $ip; } /** * 获取客户端浏览器 */ public static function getBrowse() { if (isset($_SERVER['HTTP_USER_AGENT'])) { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); } else { $userAgent = 'unknown'; } $browser = 'other'; if (preg_match('/MSIE/i', $userAgent)) { $browser = 'ie'; } else if (preg_match('/Firefox/i', $userAgent)) { $browser = 'Firefox'; } else if (preg_match('/Chrome/i', $userAgent)) { $browser = 'chrome'; } else if (preg_match('/Safari/i', $userAgent)) { $browser = 'safari'; } else if (preg_match('/Opera/i', $userAgent)) { $browser = 'opera'; } return $browser; } /** * 获取客户端访问操作系统 */ public static function getOs() { if (isset($_SERVER['HTTP_USER_AGENT'])) { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); } else { $userAgent = 'unknown'; } $os = 'web'; if (preg_match('/iphone/i', $userAgent)) { $os = 'iphone'; } else if (preg_match('/android/i', $userAgent)) { $os = 'android'; } else if (preg_match('/ipad/i', $userAgent)) { $os = 'ipad'; } else if (preg_match('/win/i', $userAgent)) { $os = 'windows'; } else if (preg_match('/mac/i', $userAgent)) { $os = 'mac'; } else if (preg_match('/linux/i', $userAgent)) { $os = 'linux'; } else if (preg_match('/unix/i', $userAgent)) { $os = 'unix'; } else if (preg_match('/bsd/i', $userAgent)) { $os = 'bsd'; } return $os; } /** * 获取客户端访问设备 */ public static function getDevice() { if (isset($_SERVER['HTTP_USER_AGENT'])) { $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); } else { $userAgent = 'unknown'; } $device = 'pc'; if (preg_match('/iphone/i', $userAgent)) { $device = 'phone'; } else if (preg_match('/android/i', $userAgent)) { $device = 'phone'; } else if (preg_match('/ipad/i', $userAgent)) { $device = 'pad'; } else if (preg_match('/win/i', $userAgent)) { $device = 'pc'; } else if (preg_match('/mac/i', $userAgent)) { $device = 'pc'; } else if (preg_match('/linux/i', $userAgent)) { $device = 'pc'; } else if (preg_match('/unix/i', $userAgent)) { $device = 'pc'; } else if (preg_match('/bsd/i', $userAgent)) { $device = 'pc'; } return $device; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程