Цель задачи заключается в том, что бы при разной вариации написания сайта (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)
{
$arUrl = parse_url($punycode);
$ret = null;
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";}
}
if (array_key_exists("host", $arUrl) &&
!empty($arUrl["host"])){
$arUrl["path"] = "" ;
$ret = sprintf("%s://%s%s", $arUrl["scheme"],
$arUrl["host"], $arUrl["path"]);
}
else if (preg_match("(([a-z0-9\-\.]+)?[a-z0-9\-]+(!?\.[a-z]{2,4}))", $arUrl["path"]))
$ret = sprintf("%s://%s", $arUrl["scheme"], $arUrl["path"]);
if ($ret && !empty($arUrl["query"]))
$ret .= sprintf("?%s", $arUrl["query"]);
return $ret;
}