Как определить принадлежность урла к домену?

xobotyi

Новичок
Понимаю, что возвращаю к жизни просто динозавра, но все же ничего сложного.
в качестве примера:

мне для скрипта надо было определять является ли ссылка внутренней, решил двумя функциями, код максимально универсальный, подходит для определения принадлежности урла к доменам любого уровня:
PHP:
function isInternal($domain, $url){
	
	if(substr($url, 0, 1) == "/" || $url == "/")
		return true;
	else if($domain == getDomain($url))
		return true;
	else{
		if(!parse_url($url))
			return true;
		return false;
	}
}

function getDomain($url){
	$domain = parse_url($url);
	$domain = $domain['host'];
	
	if(substr($domain, 0, 4) == "www."){
		$domain = substr($domain, 4);
	}
	
	return $domain;
}
 
Последнее редактирование:

autosoft

Новичок
Это зачем так?
PHP:
if(substr($url, 0, 1) == "/" || $url == "/")
Такой вариант подойдет?
PHP:
<?php

class url {

    private static function host($url) {

        return array_key_exists('host', $items = parse_url($url)) ? $items['host'] : false;
    }

    public static function is_host($host, $url) {

        return is_string($host) && $host == self::host($url);
    }

    public static function is_local($host, $url) {

        return substr($host, 0, 1) == '/' || (is_string($host = self::host($host)) && self::is_host($host, $url));
    }

    public static function in_host($domain, $url) {

        return is_string($host = self::host($url)) && ($domain == $host || substr($host, -strlen($domain) - 1) == ".{$domain}");
    }
}

$url = 'http://www.php.net/downloads.php';

var_dump(url::is_host('www.php.net', $url));
var_dump(url::is_host('php.net', $url));
var_dump(url::is_local('http://www.php.net', $url));
var_dump(url::is_local('http://www.php.net/', $url));
var_dump(url::is_local('/docs.php', $url));
var_dump(url::in_host('www.php.net', $url));
var_dump(url::in_host('php.net', $url));

?>
Результат:

bool(true)
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
 
Сверху