Http.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. namespace Qii\Request;
  3. use \Qii\Base\Request;
  4. final class Http extends Request
  5. {
  6. /**
  7. * __construct
  8. *
  9. * @param string $requestURI
  10. * @param string $baseURI
  11. */
  12. public function __construct($requestURI = null, $baseURI = null)
  13. {
  14. if (isset($_SERVER['REQUEST_METHOD'])) {
  15. $this->method = $_SERVER['REQUEST_METHOD'];
  16. } else {
  17. if (!strncasecmp(PHP_SAPI, 'cli', 3)) {
  18. $this->method = 'Cli';
  19. } else {
  20. $this->method = 'Unknown';
  21. }
  22. }
  23. if (empty($requestURI)) {
  24. do {
  25. // #ifdef PHP_WIN32
  26. if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
  27. /* check this first so IIS will catch */
  28. if ($requestURI = $this->getServer('HTTP_X_REWRITE_URL')) {
  29. break;
  30. }
  31. /* IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem) */
  32. if ($rewrited = (boolean)$this->getServer('IIS_WasUrlRewritten')) {
  33. $unencode = $this->getServer('UNENCODED_URL');
  34. if ($unencode && is_string($unencode)) {
  35. $requestURI = $unencode;
  36. }
  37. break;
  38. }
  39. // #endif
  40. }
  41. if ($requestURI = $this->getServer('PATH_INFO')) {
  42. break;
  43. }
  44. if ($requestURI = $this->getServer('REQUEST_URI')) {
  45. /* Http proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path */
  46. if (strstr($requestURI, 'http') == $requestURI) {
  47. $url_info = parse_url($requestURI);
  48. if ($url_info && isset($url_info['path'])) {
  49. $requestURI = $url_info['path'];
  50. }
  51. } else {
  52. if ($pos = strstr($requestURI, '?')) {
  53. $requestURI = substr($requestURI, 0, strlen($pos) - 1);
  54. }
  55. }
  56. break;
  57. }
  58. if ($requestURI = $this->getServer('ORIG_PATH_INFO')) {
  59. /* intended do nothing */
  60. /*
  61. if ($query = $this->getServer('QUERY_STRING')) {
  62. }
  63. */
  64. break;
  65. }
  66. } while (0);
  67. }
  68. if ($requestURI && is_string($requestURI)) {
  69. $requestURI = str_replace('//', '/', $requestURI);
  70. $this->uri = $requestURI;
  71. // request_set_base_uri
  72. $this->_setBaseUri($baseURI, $requestURI);
  73. }
  74. $this->params = array();
  75. parent::__construct();
  76. }
  77. /**
  78. * getQuery
  79. *
  80. * @param string $name
  81. * @param mixed $default
  82. * @return mixed
  83. */
  84. public function getQuery($name = null, $default = null)
  85. {
  86. if (is_null($name)) {
  87. return $_GET;
  88. } elseif (isset($_GET[$name])) {
  89. return $_GET[$name];
  90. }
  91. return $default;
  92. }
  93. /**
  94. * getRequest
  95. *
  96. * @param string $name
  97. * @param mixed $default
  98. * @return mixed
  99. */
  100. public function getRequest($name = null, $default = null)
  101. {
  102. if (is_null($name)) {
  103. return $_REQUEST;
  104. } elseif (isset($_REQUEST[$name])) {
  105. return $_REQUEST[$name];
  106. }
  107. return $default;
  108. }
  109. /**
  110. * getPost
  111. *
  112. * @param string $name
  113. * @param mixed $default
  114. * @return mixed
  115. */
  116. public function getPost($name = null, $default = null)
  117. {
  118. if (is_null($name)) {
  119. return $_POST;
  120. } elseif (isset($_POST[$name])) {
  121. return $_POST[$name];
  122. }
  123. return $default;
  124. }
  125. /**
  126. * getCookie
  127. *
  128. * @param string $name
  129. * @param mixed $default
  130. * @return mixed
  131. */
  132. public function getCookie($name = null, $default = null)
  133. {
  134. if (is_null($name)) {
  135. return $_COOKIE;
  136. } elseif (isset($_COOKIE[$name])) {
  137. return $_COOKIE[$name];
  138. }
  139. return $default;
  140. }
  141. /**
  142. * getFiles
  143. *
  144. * @param string $name
  145. * @param mixed $default
  146. * @return mixed
  147. */
  148. public function getFiles($name = null, $default = null)
  149. {
  150. if (is_null($name)) {
  151. return $_FILES;
  152. } elseif (isset($_FILES[$name])) {
  153. return $_FILES[$name];
  154. }
  155. return $default;
  156. }
  157. /**
  158. * get [params -> post -> get -> cookie -> server]
  159. *
  160. * @param string $name
  161. * @param mixed $default
  162. * @return mixed
  163. */
  164. public function get($name, $default = null)
  165. {
  166. if (isset($this->params[$name])) {
  167. return $this->params[$name];
  168. } elseif (isset($_POST[$name])) {
  169. return $_POST[$name];
  170. } elseif (isset($_GET[$name])) {
  171. return $_GET[$name];
  172. } elseif (isset($_COOKIE[$name])) {
  173. return $_COOKIE[$name];
  174. } elseif (isset($_SERVER[$name])) {
  175. return $_SERVER[$name];
  176. }
  177. return $default;
  178. }
  179. /**
  180. * isXmlHttpRequest
  181. *
  182. * @param void
  183. * @return boolean
  184. */
  185. public function isXmlHttpRequest()
  186. {
  187. $header = isset($_SERVER['HTTP_X_REQUESTED_WITH']) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : '';
  188. if (is_string($header) && strncasecmp('XMLHttpRequest', $header, 14) == 0) {
  189. return true;
  190. }
  191. return false;
  192. }
  193. /**
  194. * __clone
  195. *
  196. * @param void
  197. */
  198. private function __clone()
  199. {
  200. }
  201. }