7

フォームを検証して、Web サイト/Web ページが存在するかどうかを確認できるようにしたいと考えています。404 エラーが返された場合、それは間違いなく検証されるべきではありません。リダイレクトがある場合...私は提案を受け入れます.リダイレクトはエラーページまたはホームページに移動する場合もあれば、探していたページに移動する場合もあるため、わかりません. おそらく、リダイレクトのために、宛先アドレスをユーザーに示唆する特別な通知が表示される可能性があります。

これまでに見つけた最高のものは次のようなものでした:

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

404 と 200 では問題ありませんが'http://xyz'、URL のようなことをするとハングします。また、302 などもエラー ハンドラをトリガーします。

これは十分に一般的な質問です。誰かが作成できる場合は、完全に機能するコード例が欲しいです。これは、多くの人が使用するのに便利です。

4

4 に答える 4

4

Web ページの内容を気にする必要はなく、単に存在するかどうかを確認したいだけのようです。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);
}

冗長性を減らすために、上記の関数の内容をこれに置き換えます。

return ($includeContents) ? 
               @file_get_contents($url) :  
               (@file_get_contents($url, null, null, 0, 0) !== false)
;

ストリーム コンテキストを使用して HTTP ヘッダーを指定する方法の詳細については、http://www.php.net/file_get_contentsを参照してください。

乾杯。

于 2010-08-21T04:55:57.477 に答える
1

まず、DNS 経由でページが存在することを確認する必要があります。DNS クエリがタイムアウトするのを待っているので、「ただハングする」と言うのはそのためです。実際には吊るされていません。

DNS を確認したら、サーバーに接続できることを確認します。注意しないと、これも長いタイムアウトになります。

最後に、HTTP HEAD を実行し、ステータス コードを確認します。ここで考慮しなければならない非常に多くの特別なケースがあります: 既存のページにとって「一時的な内部サーバー エラー」とは何を意味するのでしょうか? 「恒久的に移動」はどうですか?HTTP ステータス コードを調べます。

于 2010-08-21T03:17:56.653 に答える
1

PHPを使用して、より単純なバージョンを作成しました。

function url_check($url) {

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

if ($x) {

         $reply = 1;

         fclose($x);

} else {

            $reply = 0;

}

return $reply;

}

明らか$urlにテスト URL であり、URL の存在に応じて true (1) または false (0) を返します。

于 2011-03-23T17:06:23.597 に答える
0

おそらく、ドメイン チェッカーと jQuery を組み合わせることができます。ドメイン チェッカー (PHP) は、存在しないドメインに対して 1 または 0 を応答できます。

例えば。http://webbarto.com/snajper.php?domena=stackoverflow.comは 1 を返します。入力ぼかし機能を使用して即座に確認できます。

于 2010-08-21T03:29:51.923 に答える