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

Posted

技术标签:

【中文标题】如何检查网页是不是存在。 jQuery 和/或 PHP【英文标题】:How to check if a webpage exists. jQuery and/or PHP如何检查网页是否存在。 jQuery 和/或 PHP 【发布时间】:2011-04-01 22:56:50 【问题描述】:

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

到目前为止我发现的最好的东西是这样的:

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

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

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

【问题讨论】:

我也想知道这个。 存在,您的意思是启动并运行,或者只是域。 您能否重新设计交互,以便在服务器端验证 URL 而无需用户等待? 请注意,当 GET 返回完全正常的 200 时,您也可能会冒险为 HEAD 获得 405 Method Not Allowed(您也可以阅读:不可用/已实现)。您可能需要考虑测试仅获取。 @Webarto 的想法是检查那里是否有合法页面,因此表单除了“断开的链接”之外不存在。 @SargeATM php 很好,如果这是唯一/最好的方法,我总是可以使用 jQuery 来轮询 php 代码。 【参考方案1】:

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

干杯。

【讨论】:

这非常简单而且有效。也许太简单了,因为如果需要,没有办法处理不同的代码。但可能适合我目前的需求。 非常感谢您的评论。 :-) 如果你想开启 HTTP 代码,那么你要么必须使用 cURL 或套接字之类的机制。套接字很好,因为它们不会拖入另一个依赖项,并且 cURL 并且配置起来很麻烦,但是您没有通过套接字获得本机 HTTPS 支持。上述方法确实支持 HTTPS 和许多其他开箱即用的协议 (us2.php.net/manual/en/wrappers.php)。干杯。【参考方案2】:

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

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

最后,执行 HTTP HEAD 并检查状态码。您必须在这里考虑许多许多特殊情况:“临时内部服务器错误”对现有页面意味着什么? “永久搬家”呢?查看 HTTP 状态代码。

【讨论】:

那么我如何使用 AJAX 进行检查 1 和 2? @Moss:我会用 PHP 来做,它既好又简单。 javascript 线程和 UI 响应是一个问题。【参考方案3】:

我刚刚使用 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)。

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于如何检查网页是不是存在。 jQuery 和/或 PHP的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Jquery检查页面上是否存在链接?

jquery怎么判断是不是有某个元素

jQuery:检查图像是不是存在

检查用户名和密码是不是匹配或可用 - Jquery

在追加到 JQuery 之前检查 DOM 元素是不是自动存在

jQuery检查元素是不是存在[重复]