Obtener un nombre de dominio sin TLD

Tengo este código aquí:

// get host name from URL preg_match('@^(?:http://)?([^/]+)@i', "http://www.joomla.subdomain.php.net/index.html", $matches); $host = $matches[1]; // get last two segments of host name preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "domain name is: {$matches[0]}\n"; 

La salida será php.net

Necesito solo php sin .net

Agrupe la primera parte de su segunda expresión regular en /([^.]+)\.[^.]+$/ y $matches[1] será php

Aunque las expresiones regulares están bien aquí, recomendaría parse_url

 $host = parse_url('http://www.joomla.subdomain.php.net/index.html', PHP_URL_HOST); $domains = explode('.', $host); echo $domains[count($domains)-2]; 

Esto funcionará para TLD como .com, .org, .net, etc., pero no para .co.uk o .com.mx. Necesitarías más lógica (probablemente una matriz de TLD) para analizarlos.

Es realmente fácil:

 function get_tld($domain) { $domain=str_replace("http://","",$domain); //remove http:// $domain=str_replace("www","",$domain); //remowe www $nd=explode(".",$domain); $domain_name=$nd[0]; $tld=str_replace($domain_name.".","",$domain); return $tld; } 

Para obtener el nombre de dominio, simplemente return $domain_name , solo funciona con el dominio de nivel superior. En el caso de los subdominios, obtendrá el nombre del subdominio.