Если file_get_contents при загрузки файла из сети получает не 200-ый ответ, он выдает ошибку. Как эту ошибку перехватить? Использовать try / catch? Или просто проверить переменную, куда file_get_contents должен был записать ответ? Хочу сделать обработку ситуаций, когда целевой файл не существует или недоступен по каким-то причинам.
Нужно мне сделать функцию работающую по принципу чёрной коробки - функция принимает ссылку и возвращает скачанный файл, ну или false если скачать файл по какой-то причине не получилось (код ответа не 200, домен не существует, кривой SSL сертификат и так далее).
Дмитрий, вариант хороший, но как быть, если целевой сайт слегка тупой? При проверке будет код ответа 200, а при попытке скачать зависнет у них хостинг и все отвалится с 503 кодом, например.
Дмитрий, при использовании curl я могу проверить заголовки ответа, только проблема в том, что эти заголовки объединены с ответом. Если я качаю html-страничку, не сложно их разделить, а вот если качаю картинку или любой другой файл, то у меня будут проблемы. Поэтому я и решил копать в сторону file_get_contents который при неудачах обычно всегда возвращает ошибку PHP.
Лентюй, вообще то я про опцию CURLOPT_HEADER в curl, она позволяет включит заголовки ответа в тело ответа. Может вы знаете способ прочитать заголовки отдельно, без их включения в тело ответа? Это бы тоже решило проблему.
Нужно мне сделать функцию работающую по принципу чёрной коробки - функция принимает ссылку и возвращает скачанный файл, ну или false если скачать файл по какой-то причине не получилось
file_get_contents именно так и работает.
Если file_get_contents при загрузки файла из сети получает не 200-ый ответ, он выдает ошибку. Как эту ошибку перехватить?
Vitsliputsli, огромное спасибо. Представьте себе, я реально не знал, что file_get_content возвращает false при ошибке) Серьезно) Ваш ответ решает мою проблему.
Дмитрий, кстати, нашел аналог get_headers() который не дублирует запрос: https://www.php.net/manual/ru/reserved.variables.h...
Тоже полезно, буду через него Content-Type проверять. Потому что если я качаю картинку, а почему то получаю в ответ text/html, то запрос явно неудачный.
Vitsliputsli, не говори ерунды
А то тут уже кворум собрался. Лошадь вещает про ужасы allow_url_fopen, Нокимара рассказывает как спамить ошибками, и ты туда же.
Ошибка НТТР не должна транслироваться в ошибку пхп. правильно, ловить и обрабатывать её никак не надо. Но и в логах она тоже совершенно не нужна. Тем более что попросить file_get_contents не кидать ошибку при коде ответа отличном от 200 - это две секунды. И нет, это не собака.
FanatPHP, я не говорю ерунду, а спрашиваю зачем. Нужна или не нужна ошибка в логах, зависит от задачи, если у тебя ощущение что file_get_contents не нужно выкидывать ошибку в любом случае - направь предложение в php, пусть поправят. Вполне возможно ты угадал мотивы автора и конкретно здесь не нужно фиксировать ошибку в логе, но, повторюсь, я ничего не утверждал, а спрашивал про задачу.
Vitsliputsli, я тебе сразу отвечу - не нужна. Тут дело не в угадывании, а в природе самой ошибки. Да, с настройками по умолчанию file_get_contents кидает предупреждение, если не может скачать файл - это абсолютно правильно.
Но если у тебя ситуация, когда файл недоступен, является штатной, о чем написано в вопросе, то это уже не ошибка, а элемент бизнес-логики. Который обрабатывается на уровне кода.