Я попытался использовать 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; }
file_exists
нельзя использовать для ресурсов на других веб-сайтах. Он предназначен для локальной файловой системы. Посмотрите здесь, как правильно выполнить проверку.
Как уже упоминалось в комментариях, и как говорится в ссылке, возможно (проще всего) использовать функцию get_headers
для этого:
try { if (strpos(get_headers($url,1),"404")!==FALSE){ ... your code ... } else { ... you get the idea ... } }
Чтобы повторить то, что говорили другие люди,
лучше всего использовать cURL в php, чтобы узнать, возвращает ли этот http://example.com/robots.txt код состояния 404. Если это так, то файл не существует. Если он возвращает 200, это означает, что он существует.
Будьте осторожны с пользовательскими 404 страницами, хотя я никогда не смотрю, чтобы узнать, что они возвращают.
file_exists()
http://
не поддерживает функцию stat()
, которой file_exists()
; вам нужно будет проверить код ответа HTTP, например, cURL.
Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми обертками URL. Обратитесь к поддерживаемым протоколам и упаковщикам, чтобы определить, какие обертки поддерживают семейство функций stat ().