*/ class Request { private $serverInfo; private $scheme; public function __construct() { $this->serverInfo = $_SERVER; } public function isWechat() { $userAgent = $this->getUserAgent(); if (strpos($userAgent, 'MicroMessenger') == false && strpos($userAgent, 'Windows Phone') == false) { return false; } else { return true; } } public function getUserAgent() { return $this->serverInfo['HTTP_USER_AGENT'] ?? ''; } public function isMobile() { $isMobile = false; $userAgent = $this->getUserAgent(); $mobileAgents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']; foreach ($mobileAgents as $mobileAgent) { if (stripos($userAgent, $mobileAgent) !== false) { $isMobile = true; } } return $isMobile; } public function isIOS() { $userAgent = $this->getUserAgent(); if(stripos($userAgent, 'iphone') !== false || stripos($userAgent, 'ipad') !== false || stripos($userAgent, 'ipod') !== false) { return true; } return false; } public function isAndroid() { $userAgent = $this->getUserAgent(); if(stripos($userAgent, 'android')) { return true; } return false; } public function isIOS13() { $userAgent = $this->getUserAgent(); // if (preg_match('/OS [1][3-9]_[1-9][_\d]* like Mac OS X/i', $userAgent)) { if (preg_match('/OS.*[1][3-9]_[1-9][_\d]*.*like.*Mac.*OS.*X/i', $userAgent)) { return true; } return false; } /** * 获取客户端IP */ public function getClientIP() { $serverInfo = $this->serverInfo; $ip = '0.0.0.0'; if (isset($serverInfo['HTTP_X_FORWARDED_FOR'])) { $items = explode(',', $serverInfo['HTTP_X_FORWARDED_FOR']); $position = array_search('unknown', $items); if (false !== $position) { unset($items[$position]); } $ip = trim($items[0]); } elseif (isset($serverInfo['HTTP_CLIENT_IP'])) { $ip = $serverInfo['HTTP_CLIENT_IP']; } elseif (isset($this->serverInfo['REMOTE_ADDR'])) { $ip = $serverInfo['REMOTE_ADDR']; } return $ip; } public function getHost() { $host = $this->getScheme() . '://' . $this->serverInfo['SERVER_NAME']; if (in_array($this->serverInfo['SERVER_PORT'], [80, 443])) { return $host; } return $host . ':' . $this->serverInfo['SERVER_PORT']; } public function getScheme() { if ($this->scheme) { return $this->scheme; } $serverInfo = $this->serverInfo; if (isset($serverInfo['REQUEST_SCHEME'])) { $this->scheme = $serverInfo['REQUEST_SCHEME']; return $this->scheme; } if ((isset($serverInfo['HTTPS']) && $serverInfo['HTTPS'] == 'on') || (isset($serverInfo['HTTP_X_FORWARDED_PROTO']) && $serverInfo['HTTP_X_FORWARDED_PROTO'] == 'https' || (isset($serverInfo['SERVER_PORT']) && $serverInfo['SERVER_PORT'] == 443)) ) { $this->scheme = 'https'; } else { $this->scheme = 'http'; } return $this->scheme; } }