Не удалось правильно загрузить удаленный файл изображения на PHP с помощью Curl


Я пытаюсь загрузить удаленное изображение с помощью Curl, оно загружает файл, однако, когда я пытаюсь открыть изображение на своем Mac, я получаю сообщение "не удалось открыть".

Я вижу, что имя файла и расширение не повреждены, однако каким-то образом оно сохранено не так правильно, поскольку размер файла составляет 177 байт, но я ожидаю, что размер файла будет около 3 кб.

Кто-нибудь может подсказать, почему это так? Удаленный сайт каким-то образом мешает мне загрузить файл? Я пробовал этот же код с некоторыми другими изображениями на других сайтах, и это работает нормально??

    $url = 'http://www.fifaindex.com/static/FIFA16/images/crest/256/light/21.png';
    $saveto = '21.png';

    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $raw = curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);
Author: Zabs, 2016-06-01

1 answers

Веб-сайт, с которого вы пытаетесь получить изображение, вероятно, добавил некоторые ограничения, чтобы, если изображение вызывается из-за пределов домена, оно не обслуживалось.

Чтобы обойти это, вы можете указать ссылку в настройках CURL, указав ее с помощью URL-адреса сайта, с которого вы хотите получить изображение.

В вашем случае

curl_setopt($ch, CURLOPT_REFERER, "http://www.fifaindex.com");

Я сам попробовал это на своем локальном сервере, и это сработало.

 1
Author: Igor S Om, 2016-05-31 23:24:07