*/ class Request { /** * @return bool */ public static function isGet(): bool { return $_SERVER['REQUEST_METHOD'] === 'GET' ? true : false; } /** * @return bool */ public static function isPost(): bool { return $_SERVER['REQUEST_METHOD'] === 'POST' ? true : false; } /** * @return bool */ public static function isAjax(): bool { return ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || isset($_POST['isajax']) || isset($_GET['isajax'])) ? true : false; } /** * @return bool */ public static function isMobile(): bool { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 if (isset ($_SERVER['HTTP_VIA'])) { // 找不到为flase,否则为true if (stristr($_SERVER['HTTP_VIA'], "wap")) { return true; } } // 脑残法,判断手机发送的客户端标志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = [ 'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile', 'UCBrowser', ]; // 从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return true; } } // 协议法,因为有可能不准确,放到最后判断 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移动设备 // 如果支持wml和html但是wml在html之前则是移动设备 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return true; } } return false; } /** * @param string $ua * @return bool */ public static function isSpider($ua = ''): bool { empty($ua) && $ua = $_SERVER['HTTP_USER_AGENT']; $ua = strtolower($ua); $spiders = [ 'bot', 'crawl', 'spider', 'slurp', 'sohu-search', 'lycos', 'robozilla' ]; foreach ($spiders as $spider) { if (false !== strpos($ua, $spider)) return true; } //系统定义及自定义蜘蛛 foreach (\App\Model\Spider::I()->getKeyWords() as $keyWord => $key) { if (trim($keyWord) && stripos($ua, $keyWord) !== false) { return true; } } return false; } /** * @param string $defaultIp * @return string */ public static function getIp(string $defaultIp = '0.0.0.0'): string { $ip = $_SERVER['REMOTE_ADDR']; $i = explode('.', $ip); if ($i[0] == 10 || ($i[0] == 172 && $i[1] > 15 && $i[1] < 32) || ($i[0] == 192 && $i[1] == 168)) { //如果是内网ip重新获取 $keys = [ 'HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_X_REAL_IP' ]; foreach ($keys as $key) { if (empty($_SERVER[$key])) continue; $ips = explode(',', $_SERVER[$key], 1); $ip = $ips[0]; break; } } $l = ip2long($ip); if ((false !== $l) && ($ip === long2ip($l))) { return $ip; } return $defaultIp; } public static function isWechat($ua = '') { empty($ua) && $ua = $_SERVER['HTTP_USER_AGENT']; return strpos(strtolower($ua), 'micromessenger') !== false ? true : false; } }