选择语言 :

 Bootstrap::setup_by_url

根据URL初始化

null Bootstrap::setup_by_url( )
File: ./core/bootstrap.php
private static function setup_by_url(&$request_mode)
{
    # 当没有$_SERVER["SCRIPT_URL"] 时拼接起来
    if (!isset($_SERVER['SCRIPT_URL']))
    {
        $tmp_uri = explode('?', $_SERVER['REQUEST_URI'] ,2);
        $_SERVER['SCRIPT_URL'] = $tmp_uri[0];
    }

    # 处理BASE_URL
    if (isset(self::$core_config['root_path']) && self::$core_config['root_path'])
    {
        self::$base_url = rtrim(self::$core_config['root_path'], '/');
    }
    else if (null === self::$base_url && isset($_SERVER["SCRIPT_NAME"]) && $_SERVER["SCRIPT_NAME"])
    {
        $base_url_len = strrpos($_SERVER["SCRIPT_NAME"], '/');
        if (false!==$base_url_len)
        {
            $base_url_len += 1;

            # 截取到最后一个/的位置
            $base_url = substr($_SERVER["SCRIPT_NAME"], 0, $base_url_len);

            if (preg_match('#^(.*)/wwwroot/$#', $base_url, $m))
            {
                # 特殊处理wwwroot目录
                $base_url     = $m[1] . '/';
                $base_url_len = strlen($base_url);
            }

            if (strtolower(substr($_SERVER['REQUEST_URI'], 0, $base_url_len)) == strtolower($base_url))
            {
                self::$base_url = $base_url;
            }
        }
    }

    # 当没有$_SERVER["SCRIPT_URI"] 时拼接起来
    if (!isset($_SERVER['SCRIPT_URI']))
    {
        $_SERVER['SCRIPT_URI'] = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?'https':'http').'://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_URL'];
    }

    if (isset($_SERVER['PATH_INFO']))
    {
        if (substr($_SERVER['PATH_INFO'], 0 , 9) === '/wwwroot/')
        {
            $pathinfo = substr($_SERVER['PATH_INFO'], 8);
        }
        else
        {
            $pathinfo = $_SERVER['PATH_INFO'];
        }
    }
    else
    {
        if (isset($_SERVER['REQUEST_URI']))
        {
            $request_uri = str_replace('\\', '/', $_SERVER['REQUEST_URI']);
            $root_uri    = '/'. ltrim(str_replace('\\', '/', substr($_SERVER['SCRIPT_FILENAME'], strlen($_SERVER['DOCUMENT_ROOT']))), '/');
            $index_file  = 'index'. EXT;

            if (substr($root_uri, -strlen($index_file))==$index_file)
            {
                $root_uri = substr($root_uri, 0, -strlen($index_file));
            }

            if ($root_uri && $root_uri!='/')
            {
                $request_uri = substr($request_uri, strlen($root_uri));
            }

            list($pathinfo) = explode('?', $request_uri, 2);
            $pathinfo = '/'. ltrim($pathinfo, '/');
        }
        elseif (isset($_SERVER['PHP_SELF']))
        {
            $pathinfo = $_SERVER['PHP_SELF'];
        }
        elseif (isset($_SERVER['REDIRECT_URL']))
        {
            $pathinfo = $_SERVER['REDIRECT_URL'];
        }
        else
        {
            $pathinfo = false;
        }
    }

    # 过滤pathinfo传入进来的服务器默认页
    if (false !== $pathinfo && ($indexpagelen = strlen(self::$core_config['server_index_page'])) && substr($pathinfo, -1 - $indexpagelen) == '/' . self::$core_config['server_index_page'])
    {
        $pathinfo = substr($pathinfo, 0, -$indexpagelen);
    }
    $pathinfo = trim($pathinfo);

    if (!isset($_SERVER["PATH_INFO"]))
    {
        $_SERVER["PATH_INFO"] = $pathinfo;
    }

    self::$path_info = $pathinfo;

    # 处理项目
    foreach (self::$core_config['projects'] as $project => $item)
    {
        if (!preg_match('#^[a-z0-9_]+$#i', $project)) continue;

        $rest_url  = array();
        $admin_url = array();
        if (isset($item['dir']) && $item['dir'])
        {
            $project_dir = $item['dir'];
        }
        else
        {
            $project_dir = $project;
        }

        if (isset($item['url_rest']) && $item['url_rest'])
        {
            foreach ((array)$item['url_rest'] as $tmp_url)
            {
                if (preg_match('#^http(s)?\://#i', $tmp_url))
                {
                    if (($url_path_info = self::_get_pathinfo($tmp_url)) !== false)
                    {
                        self::$project     = $project;
                        self::$project_dir = $project_dir;
                        self::$path_info   = $url_path_info;
                        self::$base_url    = $tmp_url;
                        $request_mode      = 'rest';

                        break 2;
                    }
                }
                else
                {
                    # /开头的后台URL
                    $rest_url[] = $tmp_url;
                }
            }
        }

        if (isset($item['url_admin']) && $item['url_admin'])
        {
            foreach ((array)$item['url_admin'] as $tmp_url)
            {
                if (preg_match('#^http(s)?\://#i', $tmp_url))
                {
                    if (($url_path_info = self::_get_pathinfo($tmp_url)) !== false)
                    {
                        self::$project     = $project;
                        self::$project_dir = $project_dir;
                        self::$path_info   = $url_path_info;
                        self::$base_url    = $tmp_url;
                        $request_mode      = 'admin';

                        break 2;
                    }
                }
                else
                {
                    # /开头的后台URL
                    $admin_url[] = $tmp_url;
                }
            }
        }

        if ($item['url'])
        {
            foreach ((array)$item['url'] as $url)
            {
                if (($path_info = self::_get_pathinfo($url)) !== false)
                {
                    self::$project     = $project;
                    self::$project_dir = $project_dir;
                    self::$path_info   = $path_info;
                    self::$base_url    = $url;

                    if ($rest_url)foreach ($rest_url as $tmp_url)
                    {
                        # 处理后台URL不是 http:// 或 https:// 开头的形式
                        if (($url_path_info = self::_get_pathinfo($tmp_url)) !== false)
                        {
                            self::$path_info = $url_path_info;
                            self::$base_url .= ltrim($tmp_url, '/');
                            $request_mode    = 'rest';

                            break 3;
                        }
                    }

                    if ($admin_url)foreach ($admin_url as $tmp_url)
                    {
                        # 处理后台URL不是 http:// 或 https:// 开头的形式
                        if (($url_path_info = self::_get_pathinfo($tmp_url)) !== false)
                        {
                            self::$path_info = $url_path_info;
                            self::$base_url .= ltrim($tmp_url, '/');
                            $request_mode    = 'admin';

                            break 3;
                        }
                    }

                    break 2;
                }
            }
        }
    }
}