用于URL / robots.txt的PHP file_exists()返回false

时间:2012-08-15 08:29:43

标签: php robots.txt

我尝试使用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;
        }

3 个答案:

答案 0 :(得分:6)

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

正如其他人在评论中提到的那样,链接说它(可能)最容易使用get_headers函数来执行此操作:

try {
    if (strpos(get_headers($url,1),"404")!==FALSE){
        ... your code ...
    } else {
        ... you get the idea ...
    }
}

答案 1 :(得分:4)

仅仅是其他人说的话,

最好在php中使用cURL来查明http://example.com/robots.txt是否返回404状态代码。如果是,则该文件不存在。如果它返回200则意味着它存在。

警惕自定义404页面,但我从未想过要知道它们返回的内容。

答案 2 :(得分:2)

The http:// wrapper does not support stat() functionalityfile_exists() needs;你需要检查来自例如的HTTP响应代码。卷曲。

  

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