1

file_exists(URL/robots.txt) を使用して、ランダムに選択された Web サイトにファイルが存在するかどうかを確認しようとしましたが、誤った応答が返されました。

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別の Web サイトのリソースには使用できません。ローカルファイルシステムを対象としています。チェックを適切に実行する方法については、こちらをご覧ください。

他の人がコメントで述べたように、リンクが言うように、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

他の人が言ったことの2番目に、

そのhttp://example.com/robots.txtが 404 ステータス コードを返すかどうかを調べるには、php で cURL を使用するのが最善です。存在する場合、ファイルは存在しません。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 に答える