4

我想检查远程网站是否包含一些文件。例如。robots.txtfavicon.ico。当然文件应该是可访问的(读取模式)。

因此,如果网站是:http://www.example.com/我想检查http://www.example.com/robots.txt.

我尝试获取 URL,例如http://www.example.com/robots.txt. 有时您可以查看文件是否存在,因为您在标题中收到 page not found 错误。

但是有些网站会处理此错误,而您得到的只是一些 HTML 代码,说明该页面无法找到。

您将获得状态代码为 200 的标头。

所以有人知道如何检查文件是否真的存在吗?

谢谢,格兰尼特

4

4 回答 4

3

我使用带有 CURL 的快速函数来执行此操作,到目前为止,即使 URL 的服务器尝试重定向,它也可以处理:

function remoteFileExists($url){
$curl = curl_init($url);
    curl_setopt($curl, CURLOPT_NOBODY, true);
    $result = curl_exec($curl);
    $ret = false;
    if ($result !== false) {
        $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);  
        if ($statusCode == 200) {
            $ret = true;   
        }
    }
    curl_close($curl);
    return $ret;
}

$url = "http://www.example.com";
$exists = remoteFileExists("$url/robots.txt");
if($exists){
    $robottxt = file_get_contents("$url/robots.txt");
}else{
    $robottxt = "none";
}
于 2012-04-26T02:33:43.477 回答
2

如果他们使用 HTTP 200 提供错误页面,我怀疑您是否有可靠的检测方法。不用说,以这种方式提供错误页面是非常愚蠢的......

你可以试试:

  1. 发出一个 HEAD 请求,它只会为您生成所请求资源的标头。也许您会以这种方式获得更可靠的状态代码
  2. 检查 Content-Type 标头。如果是,text/html您可以假设它是自定义错误页面,而不是robots.txt(应该作为text/plain)。对于网站图标也是如此。但我认为简单地检查text/html将是这里最可靠的方法。
于 2009-10-16T10:47:28.470 回答
1

好吧,如果网站给你一个带有成功状态代码的错误页面,你就无能为力了。

自然,如果您只是在robots.txtfavicon.ico其他非常具体的东西之后,您可以简单地检查响应文档的格式是否正确......就像robots.txt应该text/plain包含robots.txt允许包含的内容并且favicon.ico应该是图像文件。

于 2009-10-16T10:49:07.487 回答
0

.txt 文件的标头内容类型应该是 text/plain,因此如果您收到 text/html,它就不是一个简单的文本文件。

要检查图片是否是图片,您需要检索内容类型,因为它通常是 image/png 或 image/gif。还有可能使用 PHP 的 GD 库来检查它是否真的是图像。

于 2009-10-16T10:51:45.647 回答