可能重复:
How can one check to see if a remote file exists using PHP?检查,如果一个网站存在
我希望通过编程检查,如果一个网站是活的或不是。我知道我可以通过使用“cURL”或“fopen”打开url来做到这一点,但它需要很长时间,因为它需要获取整个页面。
此外,此方法不可靠,因为可能有其他原因,如不支持的协议能够打开网站。
有没有其他办法?
可能重复:
How can one check to see if a remote file exists using PHP?检查,如果一个网站存在
我希望通过编程检查,如果一个网站是活的或不是。我知道我可以通过使用“cURL”或“fopen”打开url来做到这一点,但它需要很长时间,因为它需要获取整个页面。
此外,此方法不可靠,因为可能有其他原因,如不支持的协议能够打开网站。
有没有其他办法?
您可以简单地使用HEAD请求来获取页面的标题而不是整个页面。尽管如此,该网站仍然会生成整个页面,但至少您不会下载所有内容。
为了达到这个目的,你可以使用很多方法,只要检查如何改变请求的头部,而不是做一个GET,就可以做一个HEAD。
你可以发送一个头部请求并检查http响应代码?
请问您能否详细说明您的答案? – Sourabh 2012-07-17 19:12:00
我不知道还有什么要说明的。从我的答案开始,使用谷歌进行跟踪研究会很容易。 – 2012-07-17 19:12:26
@JonTaylor:什么是标题请求?你如何发送一个?你如何检查HTTP响应码?只是因为它对你来说很明显,并不意味着它适用于所有其他人:) – 2012-07-17 19:14:50
fopen()
和fread()
不读取整个网页(不一定是反正)。您可以使用它并只读取几个字节来确定网站是否存在(200 OK)。
$file = 'http://www.test.com/idontexist.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
$exists = false;
}
else {
$exists = true;
}
为什么抑制错误? – 2012-07-17 19:13:48
,但它将花费相同的时间来打开网站,它是更可靠,然后打开或卷曲? – Sourabh 2012-07-17 19:26:30
只要你触发HTTP协议,它将会执行整个页面,如果服务器/网站不是只返回头部的话。你想要的是某种看门狗,但通常情况下,人们将实现一个小网页,只监听一个请求并返回一些信息来表明他们还活着。 – 2012-07-17 19:27:51
如果你不能依赖这样的机制,并且必须获得主页,那么没有什么可以做更多的事情,获得主页,等待所有的数据被处理,但是使用HEAD你只能传输一部分回应并没有得到一切。 – 2012-07-17 19:28:29