Я пытаюсь проверить правильность URL-адреса, введенного с php5. Я думал об использовании регулярных выражений, но, полагая, что он работает правильно все время, он решает проблему синтаксически корректной. Это ничего мне не говорит о правильности или работе URL.
Я пытаюсь найти другое решение для обоих, если это возможно. Или лучше найти для этого два отдельных решения?
Если регулярное выражение – это способ пойти, то какие проверенные регулярные выражения существуют для URL-адресов?
Вместо того, чтобы взломать голову над регулярным выражением (URL-адреса очень сложны), я просто использую filter_var()
, а затем пытаюсь выполнить ping URL-адрес с помощью cURL :
if (filter_var($url, FILTER_VALIDATE_URL) !== false) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_exec($ch); $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($status_code >= 200 && $status_code < 400) { echo 'URL is valid!'; } }
Для проверки http://www.php.net/manual/en/filter.filters.validate.php
Для проверки, существует ли он … ну, вам нужно попытаться получить к нему доступ на самом деле.
Чтобы проверить, что URL-адрес «правильный или рабочий», вам нужно будет фактически попробовать и взаимодействовать с ним (например, например, веб-браузер).
Я бы рекомендовал HTTP-библиотеку Perl, например LWP :: Simple .
RegExLib – хорошее место для использования выражений Reg Ex
Что я буду делать:
filer_var
с FILTER_VALIDATE_URL
. file_get_contents
на url и проверьте, что $http_response_header[0]
содержит 200
HTTP-ответов. Теперь, это грязно, конечно, есть еще одна элегантная версия, использующая завиток и прочее.
На странице руководства file_exists()
есть куча «проверить, что внешний файл существует».
я бы использовал regex для решения этой проблемы, и я ненавижу регулярное выражение. Однако этот инструмент облегчает мою жизнь … проверить это >> http://gskinner.com/RegExr/
Пинг URL-адреса, чтобы увидеть, является ли он действительным URL-адресом, является бессмыслицей!
Если вы действительно хотите провести «живое» тестирование, попробуйте разрешить URL-адрес, используя DSN . DNS более надежный, чем PING или HTTP.
<?php $ip = gethostbyname('www.example.com'); echo $ip; ?>
Но даже если этот недействительный URL-адрес может быть действительным. У него просто нет входа в DNS. Так что это зависит от ваших потребностей.