Можно ли проверить является ли документ по ссылке изображением?

Занимаюсь php уже года полтора. Но с такой темой столкнулся впервые. Есть ли адекватный способ проверять является ли документ по ссылке изображением? Пока-что, я не могу придумать ничего лучше getimagesize(). Может как-то заголовки проверять?
В чем собственно проблема: есть ссылки на картинки, но они не совсем прямые - судя по всему, это API, которое возвращает картинку, если она существует, и выдает страницу с ошибкой, если ее нет. Картинки гружу с помощью curl ( я не гуру курла, просто нарыл пример на просторах Необъятного, и перепили "под себя")...
if(!file_exists('./images/'. $target_image){
                $ch = curl_init('http://site.com/images/' . $source_image);
                $fp = fopen('./images/'. $target_image);
                curl_setopt($ch, CURLOPT_FILE, $fp);
                curl_setopt($ch, CURLOPT_HEADER, 0);
                curl_close($ch);
                fclose($fp);
}

Проблема в том, что некоторые картинки - "некартинки". В этом случае в мой файл изображения пишется хрень полная, которая картинкой-то и не является... Я не "акакий" просто подскажите азимут направления лопаты при копке.
Заранее спасибо.
  • Вопрос задан
  • 2675 просмотров
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Вариант 1. проверять mime-type отдаваемый сервером при отдаче файла.
Вариант 2. Пробовать загрузить картинку через GD например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
404
@404
Если это апи и он выдаёт одну и ту же страницу в случае ошибки (или почти ту же), то я бы проверял от обратного - а не является ли ответ страницей ошибки. Тут могут быть разные способы решения. В идеальном случае апи должен не просто отдавать страницу ошибки, но и ставить соответствующий http-код ответа. Если же сервис отдаёт 200 в любом случае, то можно парсить тело ответа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 16:03
5000 руб./за проект
25 апр. 2024, в 16:02
40000 руб./за проект
25 апр. 2024, в 15:58
5000 руб./за проект