*/ class Request { private $serverInfo; private $scheme; private $mobileDetect; 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 getMobileDetect() { if (!$this->mobileDetect) { $this->mobileDetect = new MobileDetect($this->serverInfo); } return $this->mobileDetect; } public function isMobile() { return $this->getMobileDetect()->isMobile(); } public function isTablet() { return $this->getMobileDetect()->isTablet(); } public function isIOS() { return $this->getMobileDetect()->isIOS(); } public function isAndroid() { return $this->getMobileDetect()->isAndroidOS(); } public function isIPadOS() { return $this->getMobileDetect()->isIPadOS(); } public function isIOS13() { $version = $this->getMobileDetect()->version('iPhone'); if ($version) { $versionItems = explode('_', $version); return isset($versionItems[0]) && intval($versionItems[0]) == 13; } 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['HTTP_HOST']; 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; } public function getServerInfo() { return $this->serverInfo; } }