Intereting Posts
значения split из запроса http-запроса angularjs (данные) Обработка больших файлов JSON в PHP JQuery – использовать ту же функцию для нескольких запросов Как передать несколько значений CheckBox через AJAX и обработать их? | Найти длину маски совпадения начального сегмента на массивах jQuery AJAX получает данные MySQL, возвращает целое число index.html Как заменить первый и последний 3 символа строки звездочкой без каких-либо функций? Как удалить каталог, который не пуст? Как получить доступ к дочерним элементам iframe с родительской страницы JavaScript? Использование cURL для получения всех ссылок на веб-сайте (а не только на странице) Проверка XML в отношении данного DTD в PHP jQuery (или любой веб-инструмент) Вложенный редактор выражений Laravel 5.3 – Одиночное уведомление для пользовательской коллекции (последователи) PHP сравнивает строку с акцентами и без акцентов PHP для защиты PDF и DOC

PHP file_exists () для URL / robots.txt возвращает false

Я попытался использовать 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 ().