[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как определить протокол сайта
Страницы: 1, 2
killer8080
Цитата (Aleks_Ku @ 25.08.2014 - 17:27)
Есть поле формы для ввода домена.

Цитата (Aleks_Ku @ 25.08.2014 - 17:27)
Допустим, сайт работает только по https протоколу

зачем вообще определять протокол, если тебя интересует только домен?
Aleks_Ku
Цитата (Arh @ 26.08.2014 - 11:26)
Aleks_Ku
Какая цель задачи? А то окажется что нужно было двойной слэш поставить


Цель задачи заключается в том, что бы при разной вариации написания сайта (site.ru, http://site.ru, https://site.ru) в текстовом поле - было определено по какому протоколу действительно работает сайт.

Алгоритм у меня пока такой:
1. вводим адрес сайта
2.1 если указан протокол - проверяем отвечает ли он, если не отвечает пробуем другой.
2.2 если протокол не указан пробуем также по http, если нет ответа https, и (чтобы наверняка) пробиваем 2 протокола, т.к. сайт может работать и по http, и по https

Проблема кода ниже: если протокол https - 433, то $fp = fsockopen("$punycode", 80); - дооолго грузится, 2) пока не чекает и то, и то. Но это вопрос времени.
function parse_url_if_valid($punycode)
{
// Массив с компонентами URL, сгенерированный функцией parse_url()
$arUrl = parse_url($punycode);
// Возвращаемое значение. По умолчанию будет считать наш URL некорректным.
$ret = null;

// Если не был указан протокол, или
// указанный протокол некорректен для url

if (!array_key_exists("scheme", $arUrl) || !in_array($arUrl["scheme"], array("http", "https"))){
// Задаем протокол
$fp = fsockopen("$punycode", 80);
if($fp == false) {$arUrl["scheme"] = "https";
echo "HTTPS";
return; }else{$arUrl["scheme"] = "http"; echo "HTTP";}
}




// Если функция parse_url смогла определить host
if (array_key_exists("host", $arUrl) &&
!
empty($arUrl["host"])){
$arUrl["path"] = "" ;
// Собираем конечное значение url
$ret = sprintf("%s://%s%s", $arUrl["scheme"],
$arUrl["host"], $arUrl["path"]);
}
// Если значение хоста не определено
// Проверяем $arUrl["path"] на соответствие шаблона URL.

else if (preg_match("(([a-z0-9\-\.]+)?[a-z0-9\-]+(!?\.[a-z]{2,4}))", $arUrl["path"]))
// Собираем URL
$ret = sprintf("%s://%s", $arUrl["scheme"], $arUrl["path"]);

// Если url валидный и передана строка параметров запроса
if ($ret && !empty($arUrl["query"]))
$ret .= sprintf("?%s", $arUrl["query"]);
return $ret;
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.