Forum Webscript.Ru
Программирование => PHP => Тема начата: Салажонок от 06 Марта 2002, 15:56:21
-
Причем, если в поле "URL" не введено ничего, то и проверять ничего не нужно.
Салажонок
-
В принципе работает, но происходит проверка только на наличие точки и правильность ситаксиса http|https|ftp|gopher|telnet, а хотелось бы и на наличие http:// и т.д.
*********** config.php *****************
[skipped]
---------------------------------------------------------
/* Return a valid url with http:// */
Function validateURL ($url) {
/* Normal URLs, at least one dot in hostname */
if (ereg("^(http|https|ftp|gopher|telnet)(://)([[:alnum:]._-]+)((\\.[[:alnum:]._-]+)+)((:[[:digit:]]+)?)((/[^[:space:]]*)?)$",$url,$regs)) {
$url = $regs[1] . $regs[2] . $regs[3] . $regs[4] . $regs[6] . $regs[8];
$protocol = $regs[1];
$hostname = $regs[3] . $regs[4];
$portnum = substr($regs[6],1,10); /* skip ":" */
$path = $regs[8];
return($url);
/* Hostnames like (http://www.ftp).blah.blah, with optional port and path */
} elseif (ereg("^(www|ftp)((\\.[[:alnum:]._-]+)+)((:[[:digit:]]+)?)((/[^[:space:]]*)?)$",$url,$regs)) {
if ($regs[1] == "ftp") {
$proto = "ftp://";
} else {
$proto = "http://";
}
$url = $proto . $regs[1] . $regs[2] . $regs[4] . $regs[6];
$hostname = $regs[1] . $regs[2];
$port = substr($regs[4],1,10); /* skip ":" */
$path = $regs[6];
return($url);
} elseif (ereg("^(([[:alnum:]._-]+)+)((\\.[[:alnum:]_-]+)+)$",$url,$regs)) {
$url = "http://" . $regs[2] . $regs[3];
$hostname = $regs[2] . $regs[3];
$path = $regs[5];
return($url);
} else {
return("");
}
}
[skipped]
*********** test.php *********************
[skipped]
if($link){
$validURL = validateURL($link);
if(!$validURL) {
$errmsg = "Error: URL not validate!";
}
}
[skipped]
-
... то автоматически происходит подстановка http:// в URL-адрес, если пользователь забыл ввести.
*********** test.php *********************
[skipped]
if($link){
$validURL = validateURL($link);
if(!$validURL) {
$errmsg = "Error: URL not validate!";
}
else{
$link = $validURL;
}
}
[skipped]
-
Честно признаться не знаю как это сделать.
Но если возможно это сделать как я думаю (просто я никогда не работал с http запросами/ответами), то можно так:
1) Принимаем УРЛ от пользователя
2) Посылаем запрос по этому адресу
3) Если оттуда приходит ответ о наличии такой страницы (по-моему ответ HTTP/200), то скрипт выполняет ОК.
То есть вопрос сводится к тому, как послать запрос на какой-то адрес, и принять от него ответ сервера.
-
faq.saterenko.ru - там есть пример того что Pr0Head написал
-
function pregtrim($str) {
return preg_replace("/[^\\x20-\\xFF]/","",@strval($str));
}
function checkurl($url) {
$url=trim(pregtrim($url));
if (strlen($url)==0) return 1;
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\\.)+(?:com|net|".
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\\~/-]*)?(?:#[^ \'\\"&<>]*)?$~i",$url,$ok))
return -1;
if (!strstr($url,"://")) $url="http://".$url;
$url=preg_replace("~^[a-z]+~ie","strtolower(\'\\\\0\')",$url);
return $url;
}
-
Пойти по этому URL и посмотреть ошибки ;)
fopen ?
-
Oak
мысль! а если она в целом не правильная?
мало того, так можно сервер зафлудить.