如何检查网页是不是存在。 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的主要内容,如果未能解决你的问题,请参考以下文章