Как проверить, существует ли веб-страница?JQuery и / или PHP - PullRequest
6 голосов
/ 21 августа 2010

Я хочу иметь возможность проверить форму, чтобы проверить, существует ли веб-сайт / веб-страница.Если он возвращает ошибку 404, то это определенно не должно проверяться.Если есть перенаправление ... Я открыт для предложений, иногда перенаправления переходят на страницу с ошибкой или домашнюю страницу, иногда они переходят на страницу, которую вы искали, поэтому я не знаю.Возможно, для перенаправления может быть специальное уведомление, в котором предлагается адрес получателя для пользователя.

Лучшее, что я нашел до сих пор, было так:

$.ajax({url: webpage ,type:'HEAD',error:function(){
    alert('No go.');
}});

Это не имеет проблем с404 и 200, но если вы сделаете что-то вроде 'http://xyz' для URL, он просто зависнет.Также 302 и т. П. Также запускают обработчик ошибок.

Это достаточно общий вопрос, и я хотел бы получить полный пример рабочего кода, если кто-то может его создать.Это может быть удобно для многих людей.

Ответы [ 4 ]

3 голосов
/ 21 августа 2010

Звучит так, будто вас не волнует содержание веб-страницы, вы просто хотите посмотреть, существует ли она.Вот как я это сделаю в PHP - я могу помешать PHP занять память с содержимым страницы.

/*
 * Returns false if the page could not be retrieved (ie., no 2xx or 3xx HTTP
 * status code). On success, if $includeContents = false (default), then we
 * return true - if it's true, then we return file_get_contents()'s result (a
 * string of page content).
 */
function getURL($url, $includeContents = false)
{
  if($includeContents)
    return @file_get_contents($url);

  return (@file_get_contents($url, null, null, 0, 0) !== false);
}

Для меньшего многословия замените содержимое вышеупомянутой функции этим.

См. http://www.php.net/file_get_contents для получения подробной информации о том, как задать заголовки HTTP, используя контекст потока.

Cheers.

1 голос
/ 23 марта 2011

Я только что написал более простую версию с использованием PHP:

function url_check($url) {

$x = @fopen($url,"r");

if ($x) {

         $reply = 1;

         fclose($x);

} else {

            $reply = 0;

}

return $reply;

}

Очевидно, $url - это тестовый URL, который возвращает true (1) или false (0) в зависимости от существования URL.

1 голос
/ 21 августа 2010

Сначала вам нужно убедиться, что страница существует через DNS. Вот почему вы говорите, что он "просто зависает" - он ожидает, пока истечет время ожидания DNS-запроса. Это на самом деле не виснет.

После проверки DNS убедитесь, что вы можете подключиться к серверу. Это еще один длинный таймаут, если вы не будете осторожны.

Наконец, выполните заголовок HTTP и проверьте код состояния. Есть много, много, много особых случаев, которые вы должны рассмотреть здесь: что означает «временная внутренняя ошибка сервера» для существующей страницы? А как насчет "навсегда переехал"? Посмотрите на коды состояния HTTP.

0 голосов
/ 21 августа 2010

Может быть, вы могли бы объединить проверку домена, и jQuery, проверка домена (PHP) может ответить 1 или 0 для несуществующих доменов.

например.http://webarto.com/snajper.php?domena=stackoverflow.com, вернет 1, вы можете использовать функцию размытия ввода для мгновенной проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...