如何检查网页是否存在。 jQuery和/或PHP

时间:2010-08-21 03:12:04

标签: php javascript validation url http-status-codes

我希望能够验证表单以检查网站/网页是否存在。如果它返回404错误,那么肯定不应该验证。如果有重定向...我接受建议,有时重定向会转到错误页面或主页,有时他们会转到您要查找的页面,所以我不知道。也许对于重定向,可能会有一个特殊通知,向用户建议目的地地址。

到目前为止,我发现的最好的事情就是这样:

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

404和200的问题没有问题,但如果您为网址执行类似'http://xyz'的操作,它就会挂起。 302等也会触发错误处理程序。

这是一个通用的问题我想要一个完整的工作代码示例,如果有人可以制作一个。这对很多人来说都很方便。

4 个答案:

答案 0 :(得分:3)

听起来你不关心网页的内容,你只想知道它是否存在。以下是我在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

干杯。

答案 1 :(得分:1)

首先,您需要通过DNS检查页面是否存在。这就是为什么你说它“只是挂起” - 它正在等待DNS查询超时。它实际上并没有挂起。

检查DNS后,检查您是否可以连接到服务器。如果你不小心,这是另一个长时间超时。

最后,执行HTTP HEAD并检查状态代码。这里有许多很多很多特殊情况需要考虑:“临时内部服务器错误”对于存在的页面意味着什么?那么“永久感动”呢?查看HTTP状态代码。

答案 2 :(得分:1)

我刚刚使用PHP编写了一个更简单的版本:

function url_check($url) {

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

if ($x) {

         $reply = 1;

         fclose($x);

} else {

            $reply = 0;

}

return $reply;

}

显然$url是测试网址,根据网址的存在返回true(1)或false(0)。

答案 3 :(得分:0)

也许你可以结合使用域检查器,而jQuery,域检查器(PHP)可以对不存在的域响应1或0。

例如。 http://webarto.com/snajper.php?domena=stackoverflow.com,将返回1,您可以使用输入模糊功能立即检查它。