Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 

164 wiersze
4.8 KiB

  1. <?php
  2. namespace Kuxin;
  3. use App\Model\Stat\Spider;
  4. /**
  5. * Class Request
  6. *
  7. * @package Kuxin
  8. * @author Pakey <pakey@qq.com>
  9. */
  10. class Request
  11. {
  12. /**
  13. * @return bool
  14. */
  15. public static function isGet(): bool
  16. {
  17. return $_SERVER['REQUEST_METHOD'] === 'GET' ? true : false;
  18. }
  19. /**
  20. * @return bool
  21. */
  22. public static function isPost(): bool
  23. {
  24. return $_SERVER['REQUEST_METHOD'] === 'POST' ? true : false;
  25. }
  26. /**
  27. * @return bool
  28. */
  29. public static function isAjax(): bool
  30. {
  31. return ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || isset($_POST['isajax']) || isset($_GET['isajax'])) ? true : false;
  32. }
  33. /**
  34. * @return bool
  35. */
  36. public static function isMobile(): bool
  37. {
  38. // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  39. if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
  40. return true;
  41. }
  42. // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  43. if (isset ($_SERVER['HTTP_VIA'])) {
  44. // 找不到为flase,否则为true
  45. if (stristr($_SERVER['HTTP_VIA'], "wap")) {
  46. return true;
  47. }
  48. }
  49. // 脑残法,判断手机发送的客户端标志,兼容性有待提高
  50. if (isset ($_SERVER['HTTP_USER_AGENT'])) {
  51. $clientkeywords = [
  52. 'nokia',
  53. 'sony',
  54. 'ericsson',
  55. 'mot',
  56. 'samsung',
  57. 'htc',
  58. 'sgh',
  59. 'lg',
  60. 'sharp',
  61. 'sie-',
  62. 'philips',
  63. 'panasonic',
  64. 'alcatel',
  65. 'lenovo',
  66. 'iphone',
  67. 'ipod',
  68. 'blackberry',
  69. 'meizu',
  70. 'android',
  71. 'netfront',
  72. 'symbian',
  73. 'ucweb',
  74. 'windowsce',
  75. 'palm',
  76. 'operamini',
  77. 'operamobi',
  78. 'openwave',
  79. 'nexusone',
  80. 'cldc',
  81. 'midp',
  82. 'wap',
  83. 'mobile',
  84. 'UCBrowser',
  85. ];
  86. // 从HTTP_USER_AGENT中查找手机浏览器的关键字
  87. if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
  88. return true;
  89. }
  90. }
  91. // 协议法,因为有可能不准确,放到最后判断
  92. if (isset ($_SERVER['HTTP_ACCEPT'])) {
  93. // 如果只支持wml并且不支持html那一定是移动设备
  94. // 如果支持wml和html但是wml在html之前则是移动设备
  95. 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')))) {
  96. return true;
  97. }
  98. }
  99. return false;
  100. }
  101. /**
  102. * @param string $ua
  103. * @return bool
  104. */
  105. public static function isSpider($ua = ''): bool
  106. {
  107. empty($ua) && $ua = $_SERVER['HTTP_USER_AGENT'];
  108. $ua = strtolower($ua);
  109. $spiders = [ 'bot', 'crawl', 'spider', 'slurp', 'sohu-search', 'lycos', 'robozilla' ];
  110. foreach ($spiders as $spider) {
  111. if (false !== strpos($ua, $spider))
  112. return true;
  113. }
  114. //系统定义及自定义蜘蛛
  115. foreach (\App\Model\Spider::I()->getKeyWords() as $keyWord => $key) {
  116. if (trim($keyWord) && stripos($ua, $keyWord) !== false) {
  117. return true;
  118. }
  119. }
  120. return false;
  121. }
  122. /**
  123. * @param string $defaultIp
  124. * @return string
  125. */
  126. public static function getIp(string $defaultIp = '0.0.0.0'): string
  127. {
  128. $ip = $_SERVER['REMOTE_ADDR'];
  129. $i = explode('.', $ip);
  130. if ($i[0] == 10 || ($i[0] == 172 && $i[1] > 15 && $i[1] < 32) || ($i[0] == 192 && $i[1] == 168)) {
  131. //如果是内网ip重新获取
  132. $keys = [ 'HTTP_X_FORWARDED_FOR', 'HTTP_CLIENT_IP', 'HTTP_X_REAL_IP' ];
  133. foreach ($keys as $key) {
  134. if (empty($_SERVER[$key]))
  135. continue;
  136. $ips = explode(',', $_SERVER[$key], 1);
  137. $ip = $ips[0];
  138. break;
  139. }
  140. }
  141. $l = ip2long($ip);
  142. if ((false !== $l) && ($ip === long2ip($l))) {
  143. return $ip;
  144. }
  145. return $defaultIp;
  146. }
  147. public static function isWechat($ua = '')
  148. {
  149. empty($ua) && $ua = $_SERVER['HTTP_USER_AGENT'];
  150. return strpos(strtolower($ua), 'micromessenger') !== false ? true : false;
  151. }
  152. }