Request.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335
  1. <?php
  2. namespace KarmaFW\Http;
  3. use \KarmaFW\Routing\Route;
  4. use \KarmaFW\Http\UserAgent;
  5. class Request
  6. {
  7. protected $method = null;
  8. protected $url = null;
  9. protected $protocol = null;
  10. protected $attributes = [];
  11. protected $route = null;
  12. protected $client_ip = null;
  13. protected $user_agent = null;
  14. public $GET = null;
  15. public $POST = null;
  16. public $COOKIE = null;
  17. public $SESSION = null;
  18. public $ENV = null;
  19. public $FILES = null;
  20. public $SERVER = null;
  21. public function __construct($method, $url, array $headers=[], $body=null, $version='1.1')
  22. {
  23. $this->url = $url;
  24. $this->method = strtoupper($method);
  25. $this->protocol = $version;
  26. //$this->setHeaders($headers);
  27. $this->setAttribute('env', ENV);
  28. //print_r($_SERVER); exit;
  29. }
  30. public static function createFromArgv()
  31. {
  32. // TODO
  33. $request = new self(null, null);
  34. $request->GET = isset($_GET) ? $_GET : [];
  35. $request->POST = isset($_POST) ? $_POST : [];
  36. $request->COOKIE = isset($_COOKIE) ? $_COOKIE : [];
  37. $request->SESSION = isset($_SESSION) ? $_SESSION : [];
  38. $request->ENV = isset($_ENV) ? $_ENV : [];
  39. $request->FILES = isset($_FILES) ? $_FILES : [];
  40. $request->SERVER = isset($_SERVER) ? $_SERVER : [];
  41. return $request;
  42. }
  43. public static function createFromGlobals()
  44. {
  45. $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : null;
  46. //$url = isset($_SERVER['REQUEST_URI']) ? explode("?", $_SERVER['REQUEST_URI'])[0] : null;
  47. $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
  48. $request = new self($method, $url);
  49. /*
  50. $request->setGet(isset($_GET) ? $_GET : []);
  51. $request->setPost(isset($_POST) ? $_POST : []);
  52. $request->setCookie(isset($_COOKIE) ? $_COOKIE : []);
  53. $request->setSession(isset($_SESSION) ? $_SESSION : []);
  54. $request->setEnv(isset($_ENV) ? $_ENV : []);
  55. $request->setFiles(isset($_FILES) ? $_FILES : []);
  56. $request->setServer(isset($_SERVER) ? $_SERVER : []);
  57. */
  58. $request->GET = isset($_GET) ? $_GET : [];
  59. $request->POST = isset($_POST) ? $_POST : [];
  60. $request->COOKIE = isset($_COOKIE) ? $_COOKIE : [];
  61. $request->SESSION = isset($_SESSION) ? $_SESSION : [];
  62. $request->ENV = isset($_ENV) ? $_ENV : [];
  63. $request->FILES = isset($_FILES) ? $_FILES : [];
  64. $request->SERVER = isset($_SERVER) ? $_SERVER : [];
  65. // Set Server name (if behind a proxy)
  66. if (! empty($request->SERVER['HTTP_X_FORWARDED_HOST'])) {
  67. // if "ProxyPreserveHost On" is not set in apache
  68. $request->SERVER['HTTP_HOST'] = $request->SERVER['HTTP_X_FORWARDED_HOST'];
  69. $request->SERVER['SERVER_NAME'] = $request->SERVER['HTTP_X_FORWARDED_HOST'];
  70. }
  71. if (empty($request->SERVER['SERVER_ADDR'])) {
  72. $request->SERVER['SERVER_ADDR'] = '127.0.0.1';
  73. }
  74. // Set Client User-Agent
  75. $user_agent = isset($request->SERVER['HTTP_USER_AGENT']) ? $request->SERVER['HTTP_USER_AGENT'] : null;
  76. $request->setUserAgent($user_agent);
  77. // Set Client IP
  78. $client_ip = null;
  79. if (! empty($request->SERVER['REMOTE_ADDR'])) {
  80. $client_ip = $request->SERVER['REMOTE_ADDR'];
  81. }
  82. if (! empty($request->SERVER['HTTP_X_FORWARDED_FOR'])) {
  83. $client_ip = $request->SERVER['HTTP_X_FORWARDED_FOR'];
  84. }
  85. $request->setClientIp($client_ip);
  86. return $request;
  87. }
  88. public function getFullUrl()
  89. {
  90. $scheme = $this->isSecure() ? 'https://' : 'http:';
  91. return $scheme . $this->SERVER['SERVER_NAME'] . $this->url;
  92. }
  93. public function getUrl()
  94. {
  95. return $this->url;
  96. }
  97. public function getMethod()
  98. {
  99. return $this->method;
  100. }
  101. public function getServerIp()
  102. {
  103. return $this->SERVER['SERVER_ADDR'];
  104. }
  105. public function getClientIp()
  106. {
  107. return $this->client_ip;
  108. }
  109. public function setClientIp($client_ip)
  110. {
  111. $this->client_ip = $client_ip;
  112. }
  113. public function getUserAgent()
  114. {
  115. return $this->user_agent;
  116. }
  117. public function setUserAgent($user_agent)
  118. {
  119. $this->user_agent = $user_agent;
  120. }
  121. public function getRoute()
  122. {
  123. return $this->route;
  124. }
  125. public function setRoute(Route $route)
  126. {
  127. $this->route = $route;
  128. }
  129. public function isGet()
  130. {
  131. return ($this->method == 'GET');
  132. }
  133. public function isPost()
  134. {
  135. return ($this->method == 'POST');
  136. }
  137. public function isHead()
  138. {
  139. return ($this->method == 'HEAD');
  140. }
  141. public function isOptions()
  142. {
  143. return ($this->method == 'OPTIONS');
  144. }
  145. public function isPut()
  146. {
  147. return ($this->method == 'PUT');
  148. }
  149. public function isDelete()
  150. {
  151. return ($this->method == 'DELETE');
  152. }
  153. public function isPatch()
  154. {
  155. return ($this->method == 'PATCH');
  156. }
  157. public function isSecure()
  158. {
  159. return (! empty($this->SERVER['HTTPS']) && $this->SERVER['HTTPS'] == 'On')
  160. || (! empty($this->SERVER['REQUEST_SCHEME']) && $this->SERVER['REQUEST_SCHEME'] == 'https')
  161. || (! empty($this->SERVER['HTTP_X_FORWARDED_HTTPS']) && $this->SERVER['HTTP_X_FORWARDED_HTTPS'] == 'On')
  162. || (! empty($this->SERVER['HTTP_X_FORWARDED_SCHEME']) && $this->SERVER['HTTP_X_FORWARDED_SCHEME'] == 'https');
  163. }
  164. public function isBot()
  165. {
  166. return UserAgent::isBot($this->user_agent);
  167. }
  168. public function isMobile()
  169. {
  170. return UserAgent::isMobile($this->user_agent);
  171. }
  172. public function isAjax()
  173. {
  174. return (! empty($this->SERVER['HTTP_X_REQUESTED_WITH']) && $this->SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
  175. }
  176. public function getAttributes()
  177. {
  178. return $this->attributes;
  179. }
  180. public function setAttributes($attributes)
  181. {
  182. $this->attributes = $attributes;
  183. }
  184. public function getAttribute($key, $default_value=null)
  185. {
  186. return isset($this->attributes[$key]) ? $this->attributes[$key] : $default_value;
  187. }
  188. public function setAttribute($key, $value)
  189. {
  190. $this->attributes[$key] = $value;
  191. }
  192. /*
  193. public function setUrl($url)
  194. {
  195. $this->url = $url;
  196. }
  197. public function setMethod($method)
  198. {
  199. $this->method = $method;
  200. }
  201. public function getGet()
  202. {
  203. return is_null($key) ? $this->GET : (isset($this->GET[$key]) ? $this->GET[$key] : null);
  204. }
  205. public function setGet($GET)
  206. {
  207. $this->GET = $GET;
  208. }
  209. public function getPost()
  210. {
  211. return is_null($key) ? $this->POST : (isset($this->POST[$key]) ? $this->POST[$key] : null);
  212. }
  213. public function setPost($POST)
  214. {
  215. $this->POST = $POST;
  216. }
  217. public function getCookie()
  218. {
  219. return is_null($key) ? $this->COOKIE : (isset($this->COOKIE[$key]) ? $this->COOKIE[$key] : null);
  220. }
  221. public function setCookie($COOKIE)
  222. {
  223. $this->COOKIE = $COOKIE;
  224. }
  225. public function getSession()
  226. {
  227. return is_null($key) ? $this->SESSION : (isset($this->SESSION[$key]) ? $this->SESSION[$key] : null);
  228. }
  229. public function setSession($SESSION)
  230. {
  231. $this->SESSION = $SESSION;
  232. }
  233. public function getEnv()
  234. {
  235. return is_null($key) ? $this->ENV : (isset($this->ENV[$key]) ? $this->ENV[$key] : null);
  236. }
  237. public function setEnv($ENV)
  238. {
  239. $this->ENV = $ENV;
  240. }
  241. public function getFiles()
  242. {
  243. return is_null($key) ? $this->FILES : (isset($this->FILES[$key]) ? $this->FILES[$key] : null);
  244. }
  245. public function setFiles($FILES)
  246. {
  247. $this->FILES = $FILES;
  248. }
  249. public function getServer($key=null)
  250. {
  251. return is_null($key) ? $this->SERVER : (isset($this->SERVER[$key]) ? $this->SERVER[$key] : null);
  252. }
  253. public function setServer($SERVER)
  254. {
  255. $this->SERVER = $SERVER;
  256. }
  257. */
  258. }