Оцените функцию getServerType(url)

glukerrr

Guest
Оцените функцию getServerType(url)

Добрый день..
Т.к. никто мне не помог написать эту функцию (узнать тип сервера по урлу), то я решил это сделать сам. Но у меня могут быть неудачные места в коде.. Пожалуйста поправьте.. А те кому эта функция нужна - пользуйтесь!

А и вот еще.. никто не подскажет как заменить тот громоздкий поиск в коде ответа, на регулярное выражение? Что-то у меня не получилось.. =(

PHP:
/******************************
Функция getServerType($url)
$url - URL сайта или IP сервера
Возвращает тип сервера
******************************/
function getServerType($url) {
	$sockurl = (substr($url, 0, 7) == 'http://') ? substr($url, 7) : $url;
	$fp = fsockopen($sockurl, 80, $errno, $errstr, 666);
	$srv_type = '';
	
	if (!$fp) {
    return $srv_type;
	} else {
    fputs ($fp, 'HEAD http://$sockurl HTTP/1.0\r\n\r\n');

    while (!feof($fp)) {
        $srv_type.= fgets($fp,128);
  	}
	}

  fclose ($fp);
	str_replace('\r\n', '\n', $srv_type);
	$params = explode('\n', $srv_type);
	
	while( list($key, $val) = each($params) ) {
		if(strtolower(substr($val, 0, 7)) == "server:") {
			$srv_type = trim(substr($val, 7));
			break;
		}
	}
	
	return $srv_type;
}
 

glukerrr

Guest
Блин.. что за бага то?
Почему backslash дублируется??? Админы, можете посмотреть/исправить этот баг ???
 

GD

Guest
поправляю...

PHP:
function getServerType($url) {
	$url = parse_url($url);
	if (isset($url['host'])) {
		$sockurl = $url['host'];
	} else {
		return 'BAD URL'; 
	}
	$fp = fsockopen($sockurl, 80, $errno, $errstr, 666); 
	
	if (!$fp) { 
		return "CAN'T CONNECT TO SERVER " . $sockurl; 
	} else {
		$srv_type = '';
		fputs ($fp, "HEAD http://" . $sockurl . " HTTP/1.0\r\n\r\n"); 
		while (!feof($fp) && !preg_match('/^server:(.*)/i', $srv_type, $Matches)) { 
			$srv_type = fgets($fp); 
		}
		fclose ($fp);
		return $Matches[1];
	}
}
замечу что это работает только с http...
 
Сверху