1

我尝试使用 file_exists(URL/robots.txt) 来查看该文件是否存在于随机选择的网站上,但我得到了错误的响应;

如何检查 robots.txt 文件是否存在?

我不想在我检查之前开始下载。

使用 fopen() 可以解决问题吗?因为:成功时返回文件指针资源,错误时返回 FALSE。

我想我可以这样说:

$f=@fopen($url,"r"); 
if($f) ...

我的代码:

http://www1.macys.com/robots.txt 也许不存在 http://www.intend.ro/robots.txt 也许不存在 http://www.emag.ro/robots.txt 也许不存在那里 http://www1.bloomingdales.com/robots.txt 也许它不在那里

try {
            if (file_exists($file)) 
                {
                echo 'exists'.PHP_EOL;
                $curl_tool = new CurlTool();
                $content = $curl_tool->fetchContent($file);
                //if the file exists on local disk, delete it
                if (file_exists(CRAWLER_FILES . 'robots_' . $website_id . '.txt'))
                    unlink(CRAWLER_FILES . 'robots_' . $website . '.txt');
                echo CRAWLER_FILES . 'robots_' . $website_id . '.txt', $content . PHP_EOL;
                file_put_contents(CRAWLER_FILES . 'robots_' . $website_id . '.txt', $content);
            }
            else
            {
                echo 'maybe it\'s not there'.PHP_EOL;
            }
        } catch (Exception $e) {
            echo 'EXCEPTION ' . $e . PHP_EOL;
        }
4

3 回答 3

6

file_exists不能用于其他网站的资源。它适用于本地文件系统。在这里查看如何正确执行检查。

正如其他人在评论中提到的那样,并且链接说它(可能)最容易使用get_headers函数来做到这一点:

try {
    if (strpos(get_headers($url,1),"404")!==FALSE){
        ... your code ...
    } else {
        ... you get the idea ...
    }
}
于 2012-08-15T08:33:47.020 回答
4

只是为了支持其他人所说的,

最好在 php 中使用 cURL 来确定http://example.com/robots.txt是否返回 404 状态码。如果是,则该文件不存在。如果它返回 200,则表示它存在。

不过要小心自定义 404 页面,我从来没有想过要找出它们返回的内容。

于 2012-08-15T08:37:14.890 回答
2

http://stat()包装器不支持file_exists()需要功能;您将需要检查来自例如 cURL 的 HTTP 响应代码。

从 PHP 5.0.0 开始,这个函数也可以与一些 URL 包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持 stat() 系列功能。

于 2012-08-15T08:35:07.803 回答