Как проверить URL в PHP

Сниппет

1) Самый простой способ проверить, правильно ли сформирован адрес электронной почты - использовать функцию filter_var():

downloadcopy
<?php
$url = 'https://wtools.io';
$validation = filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED);
if ( $validation ) $output = "$url - действительный URL";
else $output = "$url не является действительным URL";
echo $output;

Фильтр FILTER_VALIDATE_URL проверяет URL.
Возможные флаги:

  • FILTER_FLAG_SCHEME_REQUIRED - URL должен соответствовать RFC (например https://wtools)
  • FILTER_FLAG_HOST_REQUIRED - URL должен включать имя хоста (например https://wtools.io)
  • FILTER_FLAG_PATH_REQUIRED - URL должен иметь путь после имени домена (например wtools.io/php-snippets/)
  • FILTER_FLAG_QUERY_REQUIRED - URL должен содержать строку запроса (например wtools.io?name=Peter&age=37)

2) Если вы хотите узнать, действительно ли существует URL-адрес (через CURL):

downloadcopy
function urlExist($url){//se passar a URL existe
    $c=curl_init();
    curl_setopt($c,CURLOPT_URL,$url);
    curl_setopt($c,CURLOPT_HEADER,1);
    curl_setopt($c,CURLOPT_NOBODY,1);
    curl_setopt($c,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($c,CURLOPT_FRESH_CONNECT,1);
    if(!curl_exec($c)){
        return false;
    }else{
        return true;
    }
}

$url = 'https://wtools.io';
if ( urlExist($url) ) $output = "$url - действительный URL";
else $output = "$url не является действительным URL";
echo $output;

3) Проверить через регулярное выражение с http или https:

downloadcopy
<?php
$url = 'https://wtools.io';
$pattern = '/^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])/i';
if (preg_match($pattern, $url)) {
    $output = "$url - действительный URL";
} else {
    $output = "$url не является действительным URL";
}
echo $output;