$request_body]); } return array_merge($_REQUEST, $request_body); } return $_REQUEST; } else{ return $_REQUEST; } } /** * * 获取命令行下传递进来的参数 * 只支持以 - 或 -- 开头的参数 * demo:php test.php -p3 -t=abc --opt=valopt --opt2 valopt2 * @return array */ private static function cliParams() { $result = array(); $params = $GLOBALS['argv']; array_shift($params); do { $tmpEachResult = array_shift($params); if (!$tmpEachResult) { break; } $p = $tmpEachResult; if ($p[0] == '-') { $pname = substr($p, 1); $value = false; if ($pname[0] == '-') {// 长选项 (--) $pname = substr($pname, 1); if (strpos($p, '=') !== false) { // value specified inline (--=) list($pname, $value) = explode('=', substr($p, 2), 2); } } else {// 短选项 if (strpos($p, '=') !== false) { // value specified inline (-=) list($pname, $value) = explode('=', substr($p, 1), 2); } else if (strlen($p) > 1) { $pname = substr($p, 1, 1); $value = substr($p, 2); } } # 如果上面没有取到值,并且下一个不是以-开头的,则下一个值为当前参数的值 $nextparm = current($params); if ($value === false && $nextparm !== false && $nextparm[0] != '-' ) { $value = array_shift($params); } $result[$pname] = (string)$value;// 将 false转为空串,以便与http访问时对参数的处理一致 } else { # 不是以-指定开始的参数,一律丢弃 //$result[] = $p; } } while (true); return $result; } /** * 分发请求,调用Controller以及对应的action * * @param boolean $enableNginxRwite 是否启用nginx rewrite功能支持pathinfo访问方式 * @param boolean $enableModule 是否启用控制器分模块方式 * @throws * @return object */ public function dispatch($enableNginxRwite = true, $enableModule = false) { // 如果未启用nginx rewrite,通过此处简单路由功能匹配 if( !$enableNginxRwite && !self::isCLI()){ $requestUrl = $_SERVER['REQUEST_URI']; if(strpos($requestUrl, '?') !== false){ $requestUrl = substr($requestUrl, 0, strpos($requestUrl, '?')); } if(!empty($requestUrl)){ $requestUrl = explode('/', $requestUrl); if(!empty($requestUrl)){ if($enableModule){ $_REQUEST['m'] = $requestUrl[1]; $_REQUEST['c'] = $requestUrl[2]; $_REQUEST['a'] = $requestUrl[3]; if(isset($requestUrl[4])){ $_REQUEST['request_id'] = intval($requestUrl[4]); } }else{ $_REQUEST['c'] = $requestUrl[1]; $_REQUEST['a'] = $requestUrl[2]; if(isset($requestUrl[3])){ $_REQUEST['request_id'] = intval($requestUrl[3]); } } } } } self::$instance->params = self::params(); $controllerName = self::getController($enableModule); if (!class_exists($controllerName)) { throw new \Exception("controller: {$controllerName} not exists!"); } $action = self::getAction(); $controller = new $controllerName(); $controller->$action(); // // if (method_exists($controller, 'display')) { // $controller->display(); // } } public function getModule() { $m = self::param('m') ?: DEFAULT_CLASS_MODULE_NAME; return ucfirst(trim($m, '_')); } public function getModuleType() { $t = self::param('t') ?: ''; if ($t) { return ucfirst(trim($t, '_')); } } public function getController($enableModule) { $c = self::param('c'); $c = trim($c, '_'); //默认给一个控制器名 if (!$c) { $c = DEFAULT_CLASS_CONTROLLER_NAME; } $arr_class_path = array_map(function ($tmpV) { return ucfirst($tmpV); }, explode('_', $c)); $c = join('\\', $arr_class_path); $NS = Config::getInstance()->get('app_name'); $controller = "{$NS}\\Controller\\"; if ($t = self::getModuleType()) { $controller .= $t . "\\"; } if (($m = self::getModule()) && $enableModule) { $controller .= $m . "\\"; } $controller .= "{$c}"; return $controller; } public function getAction() { $action = self::param('a'); //默认给一个方法名 if (!$action) { $action = DEFAULT_CLASS_ACTION_NAME; } return $action; } /** * 获取指定的参数值 * @param $name * @return array|bool|string */ public function param($name) { if(empty($this->params)){ $this->params = self::params(); } if (isset($this->params[$name])) { return self::paramFilter($this->params[$name]); } return false; } /** * 获取raw中json格式参数值 */ public function getRawJson() { if(empty($this->params['rawjson'])){ $this->params = self::params(true); } if (isset($this->params['rawjson'])) { return self::paramFilter($this->params['rawjson']); } return false; } /** * 是否POST请求 * * @return boolean */ static public function isPost() { return $_SERVER['REQUEST_METHOD'] == 'POST' ? true : false; } /** * 是否GET请求 * * @return boolean */ static public function isGet() { return $_SERVER['REQUEST_METHOD'] == 'GET' ? true : false; } /** * 是否处于命令行下 * * @return Boolean */ static public function isCLI() { if (php_sapi_name() == "cli" || empty($_SERVER['PHP_SELF'])) { return true; } else { return false; } } /** * 获取客户端真实Ip * @return string */ static public function get_onlineip() { $onlineip = ''; if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } return $onlineip; } /** * 获取$_SERVER下面的方法 */ function getServerParam($param) { if (isset($_SERVER[$param])) { return self::paramFilter($_SERVER[$param]); } return ''; } /** * 全局的接收参数过滤 */ private function paramFilter($param) { if (is_array($param)) { foreach ($param as $key => $value) { if(is_array($value)){ self::paramFilter($value); continue; } if(!is_numeric($value)){ $param[$key] = htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8'); } } } else if (!empty($param) && !is_numeric($param)) { $param = htmlspecialchars(trim($param), ENT_QUOTES, 'UTF-8'); } return $param; } /** * 获取上传的文件信息 * * @access public * @param string|array $name 名称 * * @return null|array| \Mall\Framework\Core\File */ public function file($name = '') { $files = isset($_FILES) ? $_FILES : []; if (is_array($name)) { return $files = array_merge($files, $name); } if (!empty($files)) { // 处理上传文件 $array = []; foreach ($files as $key => $file) { if (is_array($file['name'])) { $item = []; $keys = array_keys($file); $count = count($file['name']); for ($i = 0; $i < $count; $i++) { if (empty($file['tmp_name'][$i]) || !is_file($file['tmp_name'][$i])) { continue; } $temp['key'] = $key; foreach ($keys as $_key) { $temp[$_key] = $file[$_key][$i]; } $item[] = (new File($temp['tmp_name']))->setUploadInfo($temp); } $array[$key] = $item; } else { if ($file instanceof File) { $array[$key] = $file; } else { if (empty($file['tmp_name']) || !is_file($file['tmp_name'])) { continue; } $array[$key] = (new File($file['tmp_name']))->setUploadInfo($file); } } } if (strpos($name, '.')) { list($name, $sub) = explode('.', $name); } if ('' === $name) { // 获取全部文件 return $array; } elseif (isset($sub) && isset($array[$name][$sub])) { return $array[$name][$sub]; } elseif (isset($array[$name])) { return $array[$name]; } } return; } }