[php] Wydobycie nazwy domeny

0

Witam,

Jak najprościej wydobyć nazwę domeny + końcówkę?

Tzn. dla 'jakas.tam.domenka.pl'

Otrzymać;

1 => domenka

2 => pl

a dla:

'inna.nieznana.domena.net.pl'

1 => domena

2 => net.pl

Bawiłem się z strpos i substr ale wydaje misie się to zbyt amatorskie rozwiązanie i jest problem z końcówkami złożonymi net.pl itp... może ktoś doradzić?

0

Ale.. Ale..
Ty jak to nazywasz "końcówka" to też domena. net.pl to subdomena w domenie globalnej .pl po prostu. Musiałbyś znać po prostu listę domen, które traktujesz jako złożone dla danej domeny globalnej. Nawiasem mówiąc to .pl też jest subdomeną domeny superglobalnej - pustej.

A najprościej jak to rozłożyć? Dzielisz stringa według kropki używając explode(), a ostatni człon (względnie przedostatni - example.com. też jest prawidłowe!) zawiera domenę globalną, a poprzedni domenę główną (czy jak by to nazwać). Potem sprawdzasz czy domena ustalona jako "główna" jest na liście domen typu .net.coś, .com.coś i jeśli tak to sprawdzasz jeszcze wcześniej.

Coś w stylu:

function GetMainDomain($domain = "www.example.com")
{
    $elem = explode($domain, '.'); // uwaga - mogłem pomylić kolejność parametrów explode
    $ec = count($elem);
    if ($ec > 0)
        $suffix = $elem[$ec -1]; // uwaga: uznajemy, że ostatni człon nie jest pusty!
    else
        echo "nieprawidłowa domena, ani jednej kropki nie ma!"

    if (in_array(array("net", "com", "org", "biz", "info", "name"), $elem[$ec -2])
        $main = $elem[$ec -3];
    else
        $main = $elem[$ec -2];

    echo "przyrostek: $suffix, domena $main";
}

Tylko to powyższe należy na błędy i ostatni pusty człon uodpornić. I nie wiem czy zadziała, ale mniej więcej tak powinno wyglądać. I rzecz jasna funkcja powinna coś zwracać (tablicę?), ale to już zależy jak chcesz mieć to podane.

0

Dzięki..:)

Zanim przeczytałem wyskrobałem coś takiego, wygląda na identyczny pomysł;)

private function _getWhoisUrl($sUrl){
		$aTld = array('net','org','info','com','waw');
		$aParts = explode('.',$sUrl);
		$iSize = sizeof($aParts);
		$sTld = $sSld = '';
		if(in_array($aParts[$iSize-2],$aTld)) {
			$sTld = $aParts[$iSize-2].'.'.$aParts[$iSize-1];
			$sSld = $aParts[$iSize-3];
		}  else {
			$sTld = $aParts[$iSize-1];
			$sSld = $aParts[$iSize-2];
		}

		return $sSld.'.'.$sTld;

	}

Domeny nie będą podawane z . na koncu więc udodparnianie jest tutaj powiedzmy zbędne... a reszta jakoś działa:)

0

Nie ma co dużo kombinować. W php jest funkcja, która wszystko to robi.
parse_url()
tu jest opis: http://pl.php.net/manual/pl/function.parse-url.php

0

chyba nie przeczytałeś/łaś treści wątku zbyt uważnie - parse_url rozbija url na części i zwraca całego hosta, a tu mowa właśnie o jego parsowaniu. hosta, nie url'a.

@mrjozo: chyba zgubiłeś 99% domen regionalnych.

0

możesz sprawdzić właściciela domeny w ripe, potem usunąć z domeny wszystko do pierwszej kropki włącznie i ponownie sprawdzić właściciela w ripe
powtarzać to dopóki właściciel obu jest ten sam

na wyniku otrzymasz teoretycznie to czego potrzebujesz (tylko sprawdzanie może trochę trwać)

0

dobra, głupi pomysł bo w praktyce nie działa w 99% przypadków :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1