我尝试使用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;
}
答案 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()
functionality,file_exists()
needs;你需要检查来自例如的HTTP响应代码。卷曲。
从PHP 5.0.0开始,此函数也可以与某些URL包装器一起使用。请参阅支持的协议和包装器以确定哪些包装器支持stat()系列功能。