多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ##域名操作工具类 ~~~ class domainTool { static $suffix = array( 'org.cn', 'gov.cn', 'com.cn', 'net.cn' ); /** * 获取域名后缀 * @param string $url 域名地址 * http://www.domain.com.cn 返回 com.cn * @return string */ static function getSuffix($url) { $parseUrl = parse_url($url); $domain = isset($parseUrl['host']) ? $parseUrl['host'] : $parseUrl['path']; //通过 . 分隔域名 $pieces = explode(".", $domain); if(empty($pieces)){ return ''; } //域名后缀下标 $index = count($pieces) - 1; //尝试获取com.cn, net.cn等后缀 $prevIndex = $index - 1; $suffix = $pieces[$prevIndex] . '.' . $pieces[$index]; //如果为com.cn, net.cn等后缀,直接返回 if (in_array($suffix, self::$suffix)) { return $suffix; } else { return $pieces[$index]; //直接返回域名后缀下标 } } /** * 获取根域名 * @example * http://aaa.bbb.ccc.domain.net.cn:9000/xxx/yyy?zzz=1 默认返回 domain.net.cn:9000 * @param string $url 域名地址 * @param string $subDomain 返回的二级域名 * @param bool $needPort 是否带上端口号 * @return string */ static function getRoot($url = '', $subDomain = '', $needPort = true) { if (empty($url)) { $url = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : $_SERVER['HTTP_HOST']; } //解析域名地址 $parseUrl = parse_url($url); if (!isset($parseUrl['host']) || empty($url)) { return ''; } else { $domain = $parseUrl['host']; } //如果为ip,则直接返回 if (preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/', $domain)){ return $domain; } //判断是否为com.cn、net.cn等域名后缀 $suffix = self::getSuffix($domain); $pieces = explode('.', $domain); if (strpos($suffix, '.') !== false) { $index = count($pieces) - 3; } else { $index = count($pieces) - 2; } $name = $pieces[$index]; $rootDomain = ($subDomain ? $subDomain . '.' : '') . $name . '.' . $suffix; return $rootDomain . ($needPort && isset($parseUrl['port']) ? ':' . $parseUrl['port'] : ''); } } ~~~ ##示例 ~~~ $url = 'http://aaa.bbb.ccc.domain.net.cn:9000/xxx/yyy?zzz=1'; /* * ------- 获取域名后缀示例 */ //输出net.cn echo domainTool::getSuffix($url); /* * ------- 获取根域名示例 */ //输出domain.net.cn:9000 echo domainTool::getRoot($url); //输出sub.domain.net.cn:9000 echo domainTool::getRoot($url,'sub'); //输出www.domain.net.cn echo domainTool::getRoot($url,'www',false); ~~~