/** * 获取入口文件所在目录url路径。 只能在web访问时使用,在命令行下面会抛出异常。 * * @param type $subpath 子路径或者文件路径,如果非空就会被附加在入口文件所在目录的后面 * @return type * @throws Exception */ public static function urlPath($subpath = null) { if (CoreInput::isCli()) { throw new Exception('function urlPath() can not be used in cli mode'); } else { $old_path = getcwd(); $root = str_replace(array('/', '\\'), '/', CoreInput::server('DOCUMENT_ROOT')); chdir($root); $root = getcwd(); $root = str_replace(array('/', '\\'), '/', $root); chdir($old_path); $path = self::path($subpath); return str_replace($root, '', $path); } }
private static function getQueryStr() { $system = CoreLoader::$system; // 命令行运行检查 if (CoreInput::isCli()) { global $argv; $pathinfo_query = isset($argv[1]) ? $argv[1] : ''; } else { $pathinfo = @parse_url($_SERVER['REQUEST_URI']); if (empty($pathinfo)) { if ($system['debug']) { Fn::trigger404('request parse error:' . $_SERVER['REQUEST_URI']); } else { Fn::trigger404(); } } // pathinfo模式下有?,那么$pathinfo['query']也是非空的,这个时候查询字符串是PATH_INFO和query $query_str = empty($pathinfo['query']) ? '' : $pathinfo['query']; $pathinfo_query = empty($_SERVER['PATH_INFO']) ? $query_str : $_SERVER['PATH_INFO'] . '&' . $query_str; } if ($pathinfo_query) { $pathinfo_query = trim($pathinfo_query, '/&'); } // urldecode 解码所有的参数名,解决get表单会编码参数名称的问题 $pq = $_pq = array(); $_pq = explode('&', $pathinfo_query); foreach ($_pq as $value) { $p = explode('=', $value); if (isset($p[0])) { $p[0] = urldecode($p[0]); } $pq[] = implode('=', $p); } $pathinfo_query = implode('&', $pq); return $pathinfo_query; }