首页 > 代码库 > [李景山php]每天TP5-20170117|thinkphp5-Url.php-2

[李景山php]每天TP5-20170117|thinkphp5-Url.php-2

    // 检测域名
    protected static function parseDomain(&$url, $domain)
    {// 根据 url 及传入的 域名进行解析
        if (!$domain) {// 如果没有传入合适的数据,直接 返回
            return ‘‘;
        }
        $request = Request::instance();// 请求实例化
        if (true === $domain) {// 如果传入的域名为 true 则自动判定域名
            // 自动判断域名
            $domain = $request->host();// 获取域名
            if (Config::get(‘url_domain_deploy‘)) {// 是否根域名 依赖
                // 根域名
                $urlDomainRoot = Config::get(‘url_domain_root‘);// 通过 配置文件 获取 跟域名
                $domains       = Route::rules(‘domain‘);// 路由寻找 域名规则
                $route_domain  = array_keys($domains);// 获取 跟 域名 对应的 路由规则
                foreach ($route_domain as $domain_prefix) {// 遍历循环 此前的 根域名
                    if (0 === strpos($domain_prefix, ‘*.‘) && strpos($domain, ltrim($domain_prefix, ‘*.‘)) !== false) {
                        // 能够进行 域名匹配
                        foreach ($domains as $key => $rule) {// 对路由规则进行遍历
                            $rule = is_array($rule) ? $rule[0] : $rule;// 如果 值 仍然是 数组,获取第一个元素 否则是 整个元素,
                            // 弄这么复杂的配置项 弄啥嘞
                            if (is_string($rule) && false === strpos($key, ‘*‘) && 0 === strpos($url, $rule)) {
                                $url    = ltrim($url, $rule);// 当规则是个字符串,并且没有*号,并且是用rule 开头的
                                // 删掉 开头的 这个 规则匹配符号
                                $domain = $key;// 将相应的域名 赋值到 域名里面 修正自动获取的域名
                                // 生成对应子域名
                                if (!empty($urlDomainRoot)) {// 不为空,在去拼合 域名的 跟目录文件
                                    $domain .= $urlDomainRoot;
                                }
                                break;//跳出
                            } else if (false !== strpos($key, ‘*‘)) {// 如果是*
                                if (!empty($urlDomainRoot)) {
                                    $domain .= $urlDomainRoot;// 直接拼合 自动获取的域名 跟 跟目录
                                }
                                break;
                            }
                        }
                    }
                }
            }
        } elseif (!strpos($domain, ‘.‘)) {// 以. 开头,或者没有 .
            $rootDomain = Config::get(‘url_domain_root‘);// 获取根目录
            if (empty($rootDomain)) {// 根域名 为空
                $host       = $request->host();// 请求 跟域名
                $rootDomain = substr_count($host, ‘.‘) > 1 ? substr(strstr($host, ‘.‘), 1) : $host;
            }
            $domain .= ‘.‘ . $rootDomain;
        }
        return ($request->isSsl() ? ‘https://‘ : ‘http://‘) . $domain;// 不同的协议
    }// 总结:不同的方式进行了不同的 域名生成 规则的判定

    // 解析URL后缀
    protected static function parseSuffix($suffix)
    {// 解析 URL 后缀
        if ($suffix) {// 配置文件
            $suffix = true === $suffix ? Config::get(‘url_html_suffix‘) : $suffix;// 如果传入的参数是 true
            if ($pos = strpos($suffix, ‘|‘)) {//如果有分割线,获取第一组数据,那要分割线还有什么用途呢???
                $suffix = substr($suffix, 0, $pos);
            }
        }// 后缀 是否有 . 无所谓,做了处理
        return (empty($suffix) || 0 === strpos($suffix, ‘.‘)) ? $suffix : ‘.‘ . $suffix;
    }

    // 匹配路由地址
    public static function getRuleUrl($rule, &$vars = [])
    {
        foreach ($rule as $item) {// 遍历路由规则
            list($url, $pattern, $domain) = $item;// 每个item 都会拥有这么多的选项
            if (empty($pattern)) {// 如果父级为空,直接返回
                return [$url, $domain];
            }
            foreach ($pattern as $key => $val) {//对父级不为空的情况进行处理
                if (isset($vars[$key])) {//如果对应的 配合变量
                    $url = str_replace([‘[:‘ . $key . ‘]‘, ‘<‘ . $key . ‘?>‘, ‘:‘ . $key . ‘‘, ‘<‘ . $key . ‘>‘], $vars[$key], $url);
                    unset($vars[$key]);
                    $result = [$url, $domain];// 返回 组合后的 url
                } elseif (2 == $val) {
                    $url    = str_replace([‘/[:‘ . $key . ‘]‘, ‘[:‘ . $key . ‘]‘, ‘<‘ . $key . ‘?>‘], ‘‘, $url);
                    $result = [$url, $domain];// 返回另外一种组合的url
                } else {
                    break;
                }
            }
            if (isset($result)) {// 如果有结果 返回结果
                return $result;
            }
        }
        return false;
    }//匹配当前目录

    // 指定当前生成URL地址的root
    public static function root($root)
    {
        self::$root = $root;
        Request::instance()->root($root);
    }// 获取根地址
}


本文出自 “专注php 群号:414194301” 博客,请务必保留此出处http://jingshanls.blog.51cto.com/3357095/1882895

[李景山php]每天TP5-20170117|thinkphp5-Url.php-2