2011-07-24 4 views
17

Можно создать дубликат:
what is the best way to check if a Url exists in PHP ?`является URL действительным или нет

Я ищу функцию, которая возвращает значение TRUE или FALSE в PHP, либо URL является действительным или нет.

isValidURL ($ url); я думаю, что это просто ... Это будет учитывать все возможные URL-адреса.

Действительный я хочу, чтобы он ссылался на существующую страницу веб-сайта или других файлов. Он просто должен существовать

+2

И действует означает, что? Синтаксически действительны? Или ссылки на существующий ресурс? – Gumbo

+0

@ Gordon: Это зависит от определения действительности Джеймса. – Gumbo

+0

привет, ребята, большое спасибо за вашу помощь. В действительности я хочу, чтобы он ссылался на существующую страницу веб-сайта или других файлов. Он просто должен существовать ... – james

ответ

2

Вы можете проверить, действителен ли URL-адрес или нет, с помощью функции parse_url, которая вернет false, если URL-адрес недействителен, а array в противном случае.

function isValidURL($url) { return (bool)parse_url($url); } 

довольно простой способ, да? :)

+0

Неверно: http: //sandbox.phpcode.eu/g/a4192.php – genesis

+2

Затем 'preg_match ('|^http (s)?: // [a-z0-9-] + (. [ a-z0-9 -] +) * (: [0-9] +)? (/.*)? $ | i ', $ url); 'также не является надежным. Но у меня есть своя причина не беспокоиться о доменной зоне: они будут регистрировать больше доменных зон, и мне придется добавлять все их во все мои проекты вручную? Чтобы проверить, действительно ли существует URL, я буду использовать cURL или сокеты. Для быстрой проверки этих функций мне достаточно. Я просто предлагаю это OP, и я не возражаю, если он не пометит мой ответ, как принято. Я просто предлагаю подход, который я использую сам. И это более чисто, чем 'regex', поэтому мне это нравится ;-) – Nemoden

+0

не надежна? схема хороша, вы должны проверить, существует ли это имя с gethostbyname: function isValidURL ($ url) {$ parts = parse_url ($ url); if ((bool) $ parts) {return ($ parts ['host']! = gethostbyname ($ parts ['host']);} else return false;} –

52
<?php 

$url = "http://stack*overflow.org"; 


if(filter_var($url, FILTER_VALIDATE_URL) === FALSE) 
{ 
     echo "Not valid"; 
}else{ 
     echo "VALID"; 
} 
?> 

это не проверяет ДВУ хотя

+0

это хорошо, но ваш собственный пример проверяет на 'true';)' http: // stackoverflow.invalid'. Так что это тоже ненадежно ;-) – Nemoden

+1

@Nemoden: Я знаю, что это не так. Но я сказал это уже в своем посте ... – genesis

+8

@Nemoden: Что не так с URL stackoverflow.invalid? Вы можете настроить свой собственный локальный DNS для обработки всех видов TLD. У меня есть * .lan, указывающий на несколько локальных сайтов разработки за брандмауэром. ;) –

Смежные вопросы