Как PHP на стороне клиента проверить, если URL-адрес веб-сайта является действительным? - PullRequest
1 голос
/ 27 апреля 2011

Я искал наши вопросы SO, но нашел решения, основанные на вызове ping команды, выполняемой с использованием system функции PHP.

Мой веб-сервер не позволяет мне это делать.Что мне делать?

Пожалуйста, помогите, нам.

Примечание

Мне нужно проверить со стороны client/web-browser.

Ответы [ 4 ]

2 голосов
/ 27 апреля 2011

Поскольку вы не можете загрузить внешнюю веб-страницу с помощью ajax, чтобы проверить, отвечает ли страница, вы можете сделать следующее:

  • Сначала проверьте правильность строки URL, используя регулярное выражение:

JavaScript:

Отредактировано, чтобы быть НАМНОГО более прощающим. Поскольку javascript не поддерживает сопоставление символов Юникода без каких-либо сторонних библиотек, я выбрал такой подход:

function Validate(url){ 
    var pattern = /(https?:\/\/)?.+\.[a-z]{2,4}/i 
    return pattern.test(url); 
} 

alert(Validate("http://abcü好le2.com/?query=test&test=1")); //true
alert(Validate("https://hurmårdu.se/blog/?test=1")); //true
alert(Validate("abcü好le2.com/?query=test&test=1")); //true
alert(Validate("hurmårduse/blog/?test=1")); //false
alert(Validate("hurmårduse")); //false

Примечание. Чтобы сделать эту функцию еще лучше, мы можем добавить поддержку для добавления http: // в начале строки, если она не содержит ее. Также, если вы заинтересованы в регулярном выражении Unicode: http://xregexp.com/plugins/

  • Если да, то сделать запрос ajax на ваш бэкэнд
  • Бэкэнд получает URL-адрес, отправленный с запросом ajax, и загружает URL-адрес либо с решением, которое дал вам Flave, либо, и возвращает, является ли URL-адрес отзывчивым:

PHP:

$url = $_POST["url"];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);       
curl_close($ch);
if(strlen($output)){
    return json_encode(array("is_valid" => true, "value" => $url));
}else{
    return json_encode(array("is_valid" => false, "value" => $url));
}

Примечание. Код нуждается в проверке данных, отправленных по запросу ajax.

0 голосов
/ 27 апреля 2011

простая проверка в php будет

if(strlen(file_get_contents('http://google.com')){ // do something }

на стороне клиента может быть сложно, потому что большинство браузеров не допускают межсайтовый скриптинг

В качестве альтернативы вы можете использовать php-curl, если он установлен.

0 голосов
/ 27 апреля 2011

Функция gethostbyname и checkdnsrr (эта не реализована в Windows) проверит, соответствует ли данное имя хоста записи DNS (то есть, если данное имя хоста общедоступно).Это должно быть быстрее, чем file_get_contents и curl; -)

0 голосов
/ 27 апреля 2011

Разрешает ли ваш хост использовать функции curl или socket ()?Или, возможно, делать удаленные включения с помощью команды fopen?Это, вероятно, гораздо лучшая альтернатива, чем использование системной ("ping") команды.

...