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

Занимаюсь 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);
}

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

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

Похожие вопросы