检查文件(robots.txt,favicon.ico)到网站php

时间:2009-10-16 10:44:46

标签: php file http-status-code-404 fetch

如果它包含一些文件,我想检查一个远程网站。例如。 robots.txt favicon.ico 。当然应该可以访问文件(读取模式)。

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

我尝试抓取http://www.example.com/robots.txt之类的网址。有时你可以看到文件是否存在,因为你在标题中找不到页面错误。

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

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

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

感谢名单, 花岗岩

4 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:2)

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

你可以尝试:

  1. 发出HEAD请求,只生成所请求资源的标头。也许你会以这种方式获得更可靠的状态代码
  2. 检查Content-Type标头。如果是text/html,您可以认为它是自定义错误页面而不是robots.txt(应该作为text/plain投放)。对于favicons同样。但我认为仅仅检查text/html将是最可靠的方式。

答案 2 :(得分:1)

好吧,如果网站为您提供了一个包含成功状态代码的错误页面,那么您无能为力。

当然,如果您只是在robots.txtfavicon.ico或其他非常具体的内容之后,您只需检查回复文档的格式是否正确......就像robots.txt一样text/plain包含robots.txt允许包含的内容,favicon.ico应为图像文件。

答案 3 :(得分:0)

.txt文件的标题内容类型应为text / plain,因此如果您收到text / html,则它不是简单的文本文件。

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