PHP实现通过URL提取根域名

PHP根据URL提取根域名,个人工作中用到,由于网络上很多代码都不能得到正确结果就自己写了一个,欢迎大家使用并提出其中的bug.

<?php
#使用示例
echo getBaseDomain('http://blog.jp.goo.ne.jp/index.php')->domain;echo "\n";
echo getBaseDomain('http://51.ca/index.php')->domain;echo "\n";
echo getBaseDomain('http://blog.ab.cc.win.aisa.hk/index.php')->domain;echo "\n";

function getBaseDomain($url=''){
  if(!$url){
    return $url;
  }
  #列举域名中固定元素
  $state_domain = array(
    'al','dz','af','ar','ae','aw','om','az','eg','et','ie','ee','ad','ao','ai','ag','at','au','mo','bb','pg','bs','pk','py','ps','bh','pa','br','by','bm','bg','mp','bj','be','is','pr','ba','pl','bo','bz','bw','bt','bf','bi','bv','kp','gq','dk','de','tl','tp','tg','dm','do','ru','ec','er','fr','fo','pf','gf','tf','va','ph','fj','fi','cv','fk','gm','cg','cd','co','cr','gg','gd','gl','ge','cu','gp','gu','gy','kz','ht','kr','nl','an','hm','hn','ki','dj','kg','gn','gw','ca','gh','ga','kh','cz','zw','cm','qa','ky','km','ci','kw','cc','hr','ke','ck','lv','ls','la','lb','lt','lr','ly','li','re','lu','rw','ro','mg','im','mv','mt','mw','my','ml','mk','mh','mq','yt','mu','mr','us','um','as','vi','mn','ms','bd','pe','fm','mm','md','ma','mc','mz','mx','nr','np','ni','ne','ng','nu','no','nf','na','za','aq','gs','eu','pw','pn','pt','jp','se','ch','sv','ws','yu','sl','sn','cy','sc','sa','cx','st','sh','kn','lc','sm','pm','vc','lk','sk','si','sj','sz','sd','sr','sb','so','tj','tw','th','tz','to','tc','tt','tn','tv','tr','tm','tk','wf','vu','gt','ve','bn','ug','ua','uy','uz','es','eh','gr','hk','sg','nc','nz','hu','sy','jm','am','ac','ye','iq','ir','il','it','in','id','uk','vg','io','jo','vn','zm','je','td','gi','cl','cf','cn','yr','com','arpa','edu','gov','int','mil','net','org','biz','info','pro','name','museum','coop','aero','xxx','idv','me','mobi','asia','ax','bl','bq','cat','cw','gb','jobs','mf','rs','su','sx','tel','travel'
  );

  if(!preg_match("/^http/is", $url)){
    $url="http://".$url;
  }

  $res = null;
  $res->domain = null;
  $res->host = null;
  $url_parse = parse_url(strtolower($url));
  $urlarr = explode(".", $url_parse['host']);
  $count = count($urlarr);

  if($count <= 2){
    #当域名直接根形式不存在host部分直接输出
    $res->domain = $url_parse['host'];
  }elseif($count > 2){
    $last = array_pop($urlarr);
    $last_1 = array_pop($urlarr);
    $last_2 = array_pop($urlarr);

    $res->domain = $last_1.'.'.$last;
    $res->host = $last_2;

    if(in_array($last, $state_domain)){
      $res->domain=$last_1.'.'.$last;
      $res->host=implode('.', $urlarr);
    }

    if(in_array($last_1, $state_domain)){
      $res->domain = $last_2.'.'.$last_1.'.'.$last;
      $res->host = implode('.', $urlarr);
    }
    #print_r(get_defined_vars());die;
  }
  return $res;

}
(0)

相关推荐

  • 解析PHP获取当前网址及域名的实现代码

    复制代码 代码如下: <?//获取当前的域名:echo $_SERVER['SERVER_NAME'];//获取来源网址,即点击来到本页的上页网址echo $_SERVER["HTTP_REFERER"];$_SERVER['REQUEST_URI'];//获取当前域名的后缀$_SERVER['HTTP_HOST'];//获取当前域名dirname(__FILE__);//获取当前文件的物理路径dirname(__FILE__)."/../";//获取当前文件

  • php生成短域名函数

    php生成短域名函数 public function createRandCode($string) { $code = ''; $hex_code = '1qaz2wsx3edc4rfv5t-gb6yhn7ujm8ik9ol0p_'; $now = microtime(true) * 10000; $strlen = strlen($hex_code); $hash_code = hash('sha256', $string); // 这里会为编码定义一个随机的长度,长度取决于step $st

  • PHP获取当前相对于域名目录的方法

    本文实例讲述了PHP获取当前相对于域名目录的方法.分享给大家供大家参考.具体如下: http://127.0.0.1/dev/classd/index.php/download 比如这个地址,我想得到红色区域的地址用于生成站内的链接,名为 baseurl. 用 $_SERVER['SCRIPT_NAME'] 就可以了, $_SERVER['SCRIPT_NAME'] 是当前正在访问的PHP文件的相对路径,只要如下稍作处理: 从$_SERVER['SCRIPT_NAME']中获取目录部分,并且替换

  • PHP自定义函数获取URL中一级域名的方法

    本文实例讲述了PHP自定义函数获取URL中一级域名的方法.分享给大家供大家参考,具体如下: <?php /* * Created on 2016-8-23 */ function regular_domain($domain) { if (substr ( $domain, 0, 7 ) == 'http://') { $domain = substr ( $domain, 7 ); } if (strpos ( $domain, '/' ) !== false) { $domain = sub

  • php中取得URL的根域名的代码

    复制代码 代码如下: <?php /** * 取得根域名 * * @author lonely * @create 2011-3-11 * @version 0.1 * @lastupdate lonely * @package Sl */ class Sl_RootDomain{ private static $self; private $domain=null; private $host=null; private $state_domain; private $top_domain;

  • php采用curl访问域名返回405 method not allowed提示的解决方法

    /** * http测试 * 注:PHP版本5.2以上才支持CURL_IPRESOLVE_V4 * @param $url 网站域名 * @param $type 网站访问协议 * @param $ipresolve 解析方式 */ public function web_http($url,$type,$ipresolve) { //设置Header头 $header[] = "Accept: application/json"; $header[] = "Accept-E

  • php获取根域名方法汇总

    本文实例汇总了php获取根域名方法,分享给大家供大家参考.具体实现方法如下: 如果你只简单获取当前访问你页面的域名,我们只需要使用php中的函数HTTP_HOST就可以搞定了,如果是提取url根域名是需要正则的,下面就来看看几个具体实例. 如果是获取当前域名是非常的简单的: 复制代码 代码如下: <?php //获取当前的域名: echo $_SERVER['SERVER_NAME']; //获取来源网址,即点击来到本页的上页网址 echo $_SERVER["HTTP_REFERER&q

  • 利用PHP实现短域名互转

    复制代码 代码如下: /**  * 短域名生成&解析类  */ class Build_URL { private $mem;     private $base_url = 'http://xxx.com/'; public function  __construct() {         $mem_conf    = array(                 array(                         'host'    => '192.168.10.90',  

  • PHP实现获取域名的方法小结

    本文实例总结了PHP实现获取域名的方法.分享给大家供大家参考.具体实现方法如下: 方法一(用 系统变量) 复制代码 代码如下: //缺点不使用传递过来的地址和不支持系统变量的主机 echo $_SERVER['HTTP_HOST']; 方法二(用自带函数) 复制代码 代码如下: $url = 'http://www.jb51.net/index.php?referer=jb51.net'; $arr_url = parse_url($url); echo $arr_url['host']; 方法

  • PHP获取网址的顶级域名函数代码

    PHP获取网址的顶级域名函数 目前国际顶级域名有:com|edu|gov|int|mil|net|org|biz|info|pro|name|museum|coop|aero|xxx|idv|mobi|cc|me 地域型域名比较多,应该是每个国家地区都会有吧,有心可以去收集,不过据我了解这个域名都是2个字母构成的,它可以单独使用也可以喝国际顶级域名结合使用地域型域名如: cn 中国 tw 台湾 hk 香港 域名例子: jb51.cn baidu.com jb51.com.cn 以jb51.dom

随机推荐