【问题标题】:Checking if a website exists [duplicate]检查网站是否存在[重复]
【发布时间】:2012-07-16 18:28:27
【问题描述】:

可能重复:
How can one check to see if a remote file exists using PHP?

我想以编程方式检查网站是否处于活动状态。我知道我可以通过使用“cURL”或“fopen”打开 url 来做到这一点,但这需要很多时间,因为它需要获取整个页面。

此外,此方法不可靠,因为可能存在其他原因,例如不支持的协议能够打开网站。

还有其他方法吗??

【问题讨论】:

    标签: php curl


    【解决方案1】:

    您可以简单地使用 HEAD 请求来仅获取页面的标题而不是整个页面。尽管如此,该网站仍会生成完整页面,但至少您不会下载所有内容。

    要实现这一点,您可以使用多种方法,只需检查如何更改请求的标头,而不是执行 GET,您可以执行 HEAD。

    【讨论】:

    • 但是和打开网站的时间一样,是不是比fopen或者curl更靠谱?
    • 只要您触发 HTTP 协议,如果服务器/网站没有构建为仅返回标头,它将执行整个页面。你想要的是某种看门狗,但通常,人们会实现一个只监听请求并返回一些内容以表明他们还活着的小网页。
    • 如果不能依赖这样的机制,必须要获取首页,那你也无能为力了,获取首页,等待所有数据处理完毕,但是使用HEAD您只能传输部分响应,而不能得到所有响应。
    【解决方案2】:

    fopen()fread() 不阅读整个网页(不一定)。您可以使用它并仅读取几个字节来确定网站是否存在(200 OK)。

    【讨论】:

      【解决方案3】:

      您可以只发送一个标头请求并检查 http 响应代码吗?

      【讨论】:

      • 你能详细说明你的答案吗?
      • 我不确定还有什么要详细说明的。从我的回答中可以很容易地使用谷歌进行后续研究。
      • @JonTaylor:什么是标头请求?你怎么寄一个?如何检查 HTTP 响应代码?仅仅因为它对你来说很明显,并不意味着它适用于其他人:)
      • @Truth 不,我从来没有说过这很明显,但是如果他们自己不做一点工作就没有意义,我给了他们正确的想法,他们可以轻松搜索谷歌找到出如何实现它。我不会向他们提供所有答案,但我非常高兴(正如您从我关于 SO 的大部分答案中可以看出的那样)为人们指明正确的方向。
      • 如果他们不愿意输入“php 标头请求”并返回这个google.co.uk/…,那么我不明白为什么要花时间为他们输入答案。
      【解决方案4】:
      $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;
      }
      

      【讨论】:

      • 为什么要抑制错误?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 2020-12-31
      • 1970-01-01
      • 2011-10-06
      • 2013-07-29
      • 2011-03-06
      • 2011-02-25
      相关资源
      最近更新 更多