$v) { $query .= $k . '=$' . $i . '&'; $data[$i] = $v; $i++; } $query = rtrim($query, '&'); if ($key = array_search($uri . '?' . $query, $route)) { $i = 0; $uri = preg_replace_callback('/\(.*?\)/', function($param) use($data, &$i) { $i++; return $data[$i]; }, $key); } } } elseif ($param) { $uri .= '&' . http_build_query($param); } return $project['url'] . self::$type . $uri; } public static function get() { if (!self::command()) { self::api(); } self::match(); self::filter(self::$data); if (isset(self::$data['uuid']) && isset(Config::get('setting')['redis']) && !\Dever\Helper\Redis::lock(self::$data['uuid'], 1, 10)) { Output::error('route repeat'); } return self::$data; } protected static function command() { if (isset($_SERVER['argc'])) { global $argv; if (isset($argv[1]) && $argv[1]) { self::$data = \Dever::json_decode($argv[1]); } define('DEVER_PROTO', 'command'); define('DEVER_APP_HOST', ''); return true; } return false; } protected static function api() { self::$data = $_REQUEST; if (isset($_FILES) && $_FILES) { self::$data = array_merge(self::$data, $_FILES); } $pathinfo = self::pathinfo(); if ($pathinfo) { self::$data['l'] = trim($pathinfo, '/'); } else { self::$type = '?l='; } define('DEVER_PROTO', ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https' : 'http'); define('DEVER_APP_HOST', DEVER_PROTO . '://' . $_SERVER['HTTP_HOST'] . ($_SERVER['SCRIPT_NAME'] ? substr($_SERVER['SCRIPT_NAME'], 0, strpos($_SERVER['SCRIPT_NAME'], DEVER_ENTRY)) : DIRECTORY_SEPARATOR)); } protected static function pathinfo() { $pathinfo = ''; if (isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO']) { $pathinfo = $_SERVER['PATH_INFO']; } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { $pathinfo = $_SERVER['ORIG_PATH_INFO']; } return $pathinfo; } public static function match() { if (!isset(self::$data['l'])) { Output::error('route not exists'); } if ($route = Config::get('setting')['route']) { $value = self::$data['l']; if (isset($route[$value])) { self::$data['l'] = $route[$value]; } else { foreach ($route as $k => $v) { $k = str_replace(':any', '.+', str_replace(':num', '[0-9]+', $k)); if (preg_match('#^' . $k . '$#', $value)) { if (strpos($v, '$') !== false && strpos($k, '(') !== false) { $v = preg_replace('#^' . $k . '$#', $v, $value); } if (strpos($v, '?')) { $temp = explode('?', $v); $v = $temp[0]; parse_str($temp[1], $data); self::$data = array_merge($data, self::$data); } self::$data['l'] = $v; } } } } } protected static function filter(&$data) { if ($data) { foreach ($data as $k => $v) { if (is_array($v)) { self::filter($v); } else { if ($data[$k] == 'undefined') { $data[$k] = ''; } else { $data[$k] = htmlspecialchars($v); } } } } } }